【发布时间】:2013-06-13 14:50:13
【问题描述】:
我有一个类,我通过提供像 parser = ParserClass('/path/to/file') 这样的文件名来实例化它,然后我调用 parser.parse() 方法打开并读取文件。
现在我想对内部发生不好的事情进行单元测试:
with open(filename, 'rb') as fp:
// do something
将引发正确的异常,所以我想像这样模拟__builtin__.open:
from mock import MagicMock, patch
from StringIO import StringIO
test_lines = StringIO("""some test lines, emulating a real file content""")
mock_open = MagicMock(return_value=test_lines)
with patch('__builtin__.open', mock_open):
self.mock.parse()
但这给了我一个AttributeError: StringIO instance has no attribute '__exit__'。
我认为 StringIO 的行为与文件对象完全一样,但似乎并非如此。
我怎样才能用给定的内容(test_lines)和模拟对象来测试这个方法?我应该改用什么?
【问题讨论】:
标签: python unit-testing python-2.7 mocking