单元测试时重新加载当前模块

时间:2014-10-30 14:01:10

标签: python unit-testing

当运行简单的单元测试时,有时可以更容易地将测试保留在类中。但是,我不知道如何重新加载当前模块,因此无论何时需要,我都必须将测试移到单独的模块中。有办法解决这个问题吗?

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,但我想知道是否有更好的方法。

2 个答案:

答案 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()