模拟补丁无法在其他模块上使用。
如果运行使用补丁的模块,则补丁可以工作。但是,如果运行其他模块中的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,则打印“原始”。