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

2024-10-03 13:25:04 发布

您现在位置:Python中文网/ 问答频道 /正文

当运行一个简单的unittest时,将测试保留在类中有时会更容易一些。但是,我不知道如何重新加载当前模块,因此每当需要时,我必须将测试转移到单独的模块中。有办法吗?在

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


Tags: 模块方法importselffoomaindefunittest
2条回答

重新加载模块不是个好主意。在

class TestMock(unittest.TestCase):

def setUp(self):
    MyObject = MockMyObject
    self.mocked = MyObject()

def tearDown(self):
    pass

def testFunction(self):
    self.mocked.do_mocked_function()

您可以将原始类保存在一个变量中,并在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()

相关问题 更多 >