I’ve recently been rewriting a mess of bash, tcsh and Python code as a Python script, and this has proven interesting to test. I’ve written a tiny Python library called fakefile
to help out with it, so I can write code like this:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| import fakefile
import unittest
import mock
def my_function():
with open("somefile", "w") as f:
f.write("correct output")
with open("existing_file", "w") as f:
return f.read()
class TestMyCode(unittest.TestCase):
def test_my_function(self):
faker = fakefile.FakeFile()
faker.set_contents("existing_file", "correct input")
with mock.patch('__builtin__.open', faker.open):
result = my_function() # No file "somefile" will be created!
# No file "existing_file" will be read!
self.assertEquals(faker.files["somefile"].file_contents,
"correct output")
|
The library is available on github as lutzky/fakefile. Naturally, however, it turns out I’ve been outdone by Google’s pyfakefs. They have some clever bast^H^H^H^Hgooglers working there!