我正在尝试测试类的构造函数的成功调用,但未将其记录在我的Mock对象中。我正在使用pytest
和pytest-mock
库分别进行单元测试和模拟。
想象一下,我在cryptocurrency
模块的transaction.py
包中有以下类:
class Transaction:
def __init__(self, test):
self.test = test
然后在tests
模块的另一个软件包test_transaction.py
中进行以下测试:
def test_constructor(mocker):
mock_transaction = mocker.patch('cryptocurrency.transaction.Transaction',
autospec=True)
Transaction('123')
mock_transaction.assert_called_once()
为什么测试失败并显示以下消息:
AssertionError: Expected 'Transaction' to have been called once. Called 0 times.
模拟对象不是要监听类实例的初始化并记录吗?
编辑:我已经回答了这个问题,但是我还有另一个类似的情况仍然无法解决。想象一下,类Transaction
也具有以下方法:
@classmethod
def new_transaction(cls, test)
return cls(test)
并且测试是:
def test_new_transaction(mocker):
mock_transaction = mocker.patch('cryptocurrency.transaction.Transaction',
autospec=True)
Transaction.new_transaction('123')
mock_transaction.assert_called_once()
我无法正常工作。我已经尝试按照建议的答案将补丁程序更改为__name__ + 'Transaction'
,但仍然无法正常工作。我觉得我的初始解决方案应该是正确的解决方案,因为即使测试引用了某个Transaction
导入,new_transaction()
方法仍将与Transactiion
上的原始cryptocurrency.transaction.Transaction
进行交互。