我有以下简化的类需要进行mock:
class myClass(object):
@staticmethod
def A():
#...
def check(self):
#code...
value = self.A()
#more code...
在我的第一个测试中,我仅模拟了方法A。
from django.test import TestCase
from mock import MagicMock
import myClass
class FirstTest(TestCase):
def setUp(self):
myClass.A = MagicMock(return_value = 'CPU')
def test(self):
#some tests
myClassObj = myClass()
myClassObj.check()
而在我的第二个测试中,我模拟了整个检查方法:
from django.test import TestCase
from mock import MagicMock
import myClass
class SecondTest(TestCase):
def setUp(self):
myClass.check = MagicMock(return_value = someObject)
def test(self):
#some tests
myClassObj = myClass()
myClassObj.check()
现在我的第一个测试中的断言失败了,原因是它调用的不是在check()
内部调用A()
并进行模拟的check()
,而是在第二个测试中完全模拟的check()
。
有没有办法在测试后清除并将该方法设置为“正常”状态?我已经尝试过myClass.check.reset_mock()
,但它似乎没有做任何事情。改变测试顺序也没有任何效果。
我正在使用来自http://pypi.python.org/pypi/mock/的Python Mock 1.0b1。