我有一些用于单元测试的代码。但是,它加载的库需要一些鼻子测试实际上不需要的数据,因为这些数据被单元测试模拟出来。我想保护库中的文件读取,以便在鼻子测试的情况下不会调用它们。
有一种简单的方法吗?
我可以用sys.modules或初始命令行做一些事情,但如果它存在的话,我更喜欢更优雅的东西。
答案 0 :(得分:8)
正如评论中所提到的,这段代码的结构是一团糟,测试的一部分是确保我在重构时不会破坏...
所以,现在,(除非有人给我一个更好的答案),我正在使用:
if 'nose' not in sys.modules.keys():
<read the data>
答案 1 :(得分:2)
正确的方法是使用空模拟来模拟带有副作用的所有代码(我假设你不想要的东西)。
给出tests_module my_module:
def do_something_and_destroy_world():
destroy_world()
return None
示例测试文件是:
import mock
import unittest
import my_module
class MyTest(unittest.TestCase):
def testSomethingUgly(self):
with mock.patch('my_module.destroy_world', return_value=None):
result = do_something_and_destroy_world()
self.assertIsNone(result)
运行测试时,断言将是正确的,并且destroy_world
不会被调用 - 而是用具有固定返回值的空模拟替换它。