无法在python中使用unitest模拟类方法

2024-10-16 11:21:20 发布

您现在位置:Python中文网/ 问答频道 /正文

模块a.ClassA

class ClassA():
    def __init__(self,callingString):
        print callingString

    def functionInClassA(self,val):
        return val

模块b.ClassB

^{pr2}$

Pythonunittest

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")

断言失败。我到底哪里错了?在


Tags: 模块fromimportselfreturndefvalunittest
1条回答
网友
1楼 · 发布于 2024-10-16 11:21:20

您分配给return_value两次:

classAmock.return_value=dummyMock
classAmock.return_value=Mock()

第二个赋值完全取消了设置dummyMock的工作;新的Mock实例没有设置functionInClassA属性。在

您不需要创建新的模拟对象;只需使用默认的return_value属性值:

^{pr2}$

您不需要断言assert_called_once_with()的返回值,因为它总是None(使您的额外的assert总是失败的)。将断言留给assert_called_once_with()方法,它将根据需要引发。在

相关问题 更多 >