当运行简单的单元测试时,有时可以更容易地将测试保留在类中。但是,我不知道如何重新加载当前模块,因此无论何时需要,我都必须将测试移到单独的模块中。有办法解决这个问题吗?
module: foo
import unittest
class MyObject
...
class MockMyObject
...
class TestMock(unittest.TestCase):
def setUp(self):
MyObject = MockMyObject
mocked = MyObject()
def tearDown(self):
reload(foo) # what goes here?
def testFunction(self):
mocked.do_mocked_function()
if __name__ == "__main__":
unittest.main()
我发现处理此问题的方法是使用import sys
方法中的reload(sys.modules[__name__])
和tearDown
,但我想知道是否有更好的方法。
答案 0 :(得分:2)
您可以将原始类保存在变量中,然后在tearDown
函数中将其恢复
这是一个例子:
class TestMock(unittest.TestCase):
original = MyObject
def setUp(self):
global MyObject
MyObject = MockMyObject
def tearDown(self):
global MyObject
MyObject = TestMock.original
def testFunction(self):
MyObject().do_mocked_function()
答案 1 :(得分:1)
重新加载模块不是一个好主意。
class TestMock(unittest.TestCase):
def setUp(self):
MyObject = MockMyObject
self.mocked = MyObject()
def tearDown(self):
pass
def testFunction(self):
self.mocked.do_mocked_function()