模拟补丁程序范围问题:模拟补丁程序在其他模块的unittest主调用中不起作用,该调用来自存在补丁程序的模块

时间:2019-02-09 12:12:05

标签: python python-3.x

模拟补丁无法在其他模块上使用。

如果运行使用补丁的模块,则补丁可以工作。但是,如果运行其他模块中的unittest.main(),将无法正常工作。 (一旦加载了测试用例,所有模块中的所有测试用例类都会被调用。)

我想这可能是由于在另一个模块中导入修补的类引起的。但是我找不到解决问题的方法。

此代码在Annaconda的spyder 3.3.2中运行。 Python 3.7.1。

------ test_A.py ------

import unittest
from unittest.mock import patch

from sample import SampleA, SampleB

class TestA(unittest.TestCase):
    def test_sampling(self):
        def side_effect_func():
            print('mocked')
        with patch('sample.SampleB.funcb') as func:
            func.side_effect = side_effect_func
            s = SampleA()
            s.funca()

if __name__=='__main__':
    unittest.main()

------ test_B.py ------

from sample import SampleB

if __name__=='__main__':
    unittest.main()

----- sample.py ------

class SampleA():
    def funca(self):
        self.b =SampleB()
        self.b.funcb()

class SampleB():
    def funcb(self):
        print('origine')

首先,需要运行两个模块test_A和test_b。

如果运行test_A,则打印“模拟”。但是,如果运行了test_B,则打印“原始”。

0 个答案:

没有答案