gpt4 book ai didi

python - 为什么在 nosetests 多次测试中存在代码后 mocking 仍然有效?

转载 作者:行者123 更新时间:2023-11-28 16:50:07 25 4
gpt4 key购买 nike

我有以下模拟 MyClass.mymethod 的代码 test_A.py:

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 的后续引用都将指向模拟对象,即使这些引用位于不同的类中也是如此。

您想要的是一种替换仅适用于类 test_AMyClass.mymethod() 的方法。实现此目的的最简单方法是在 tearDown 方法中恢复原始的 mymethod:

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

关于python - 为什么在 nosetests 多次测试中存在代码后 mocking 仍然有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8499718/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com