模块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")
断言失败。我到底哪里错了?
答案 0 :(得分:1)
您已分配到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()
方法,它会根据需要提升。