在单元测试时重新加载当前模块
在运行一个简单的单元测试时,有时候把测试放在同一个类里会更方便。不过,我不知道怎么重新加载当前的模块,所以每当需要这样做的时候,我就得把测试移到一个单独的模块里。有没有什么办法可以解决这个问题呢?
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()
我找到的解决方法是在 tearDown
方法里使用 import sys
和 reload(sys.modules[__name__])
,但我在想是否还有更好的方法。
2 个回答
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()
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()