python-在鼻子测试中存在代码后,为什么多重测试仍然有效?
作者:互联网
我有以下代码test_A.py模拟MyClass.mymethod:
from unittest import main
from mocker import Mocker, MockerTestCase
Class test_A(MockerTestCase):
def setUp(self):
self.m=Mock()
MyClass.mymethod = self.m.mock()
self.m.result(None)
self.m.count(0,None)
self.m.replay()
def test_me(self):
#Do something about MyClass.method
def tearDown(self):
self.m.restore()
self.m.verify()
我还有另一个代码test_B.py,它不模拟MyClass.mymethod:
Class test_B(MockerTestCase):
def setUp(self):
pass
def test_me(self):
#Do something about MyClass.method
def tearDown(self):
pass
但是,当我执行“ nosetests test_A.py test_B.py”时,看起来在测试test_A.py并输入test_B.py之后,MyClass.mymethod仍然被模拟.不知道为什么以及如何解决它.谢谢!
解决方法:
该行:
MyClass.mymethod = self.m.mock()
确实确实用新对象替换了MyClass.mymethod().所有后续对MyClass.mymethod的引用都将是模拟对象,即使这些引用在不同的类中也是如此.
您想要的是一种替换MyClass.mymethod()的方法,该方法仅在test_A类中有效.实现此目的的最简单方法是在tearDown方法中还原原始方法:
Class test_A():
def setUp(self):
self.originalMyMethod = MyClass.mymethod
self.m=Mock()
MyClass.mymethod = self.m.mock()
self.m.result(None)
self.m.count(0,None)
self.m.replay()
def test_me(self):
# Do something about MyClass.mymethod
def tearDown(self):
self.m.restore()
self.m.verify()
MyClass.mymethod = self.originalMyMethod
标签:nosetests,python 来源: https://codeday.me/bug/20191202/2084899.html