模块a.ClassA
class ClassA():
def __init__(self,callingString):
print callingString
def functionInClassA(self,val):
return val模块b.ClassB
from a.ClassA import ClassA
class ClassB():
def __init__(self,val):
self.value=val
def functionInsideClassB(self):
obj=ClassA("Calling From Class B")
value=obj.functionInClassA(self.value)Python unittest类
import unittest
from b.ClassB import ClassB
from mock import patch, Mock, PropertyMock,mock
class Test(unittest.TestCase):
@patch('b.ClassB.ClassA',autospec = True)
def _test_sample(self,classAmock):
dummyMock=Mock()
dummyMock.functionInClassA.return_value="mocking functionInClassA"
classAmock.return_value=dummyMock
obj=ClassB("dummy_val")
obj.functionInsideClassB()
assert dummyMock.functionInClassA.assert_called_once_with("dummy_val")断言失败。我到底哪里出错了?
发布于 2016-09-22 19:38:45
您分配给return_value两次:
classAmock.return_value=dummyMock
classAmock.return_value=Mock()第二个赋值完全取消了设置dummyMock的工作;新的Mock实例没有设置functionInClassA属性。
您不需要创建新的模拟对象;只需使用默认的return_value属性值:
class Test(unittest.TestCase):
@patch('b.ClassB.ClassA', autospec=True)
def test_sample(self, classAmock):
instance = classAmock.return_value
instance.functionInClassA.return_value = "mocking functionInClassA"
obj = ClassB("dummy_val")
obj.functionInsideClassB()
instance.functionInClassA.assert_called_once_with("dummy_val")您可以使用而不是来断言assert_called_once_with()的返回值,因为它始终是None (使额外的assert失败,总是失败)。将断言留给assert_called_once_with()方法,它将根据需要引发。
https://stackoverflow.com/questions/39647480
复制相似问题