我试图测试我的类的构造函数的成功调用,但它没有被记录在我的Mock对象中 . 我分别使用 pytest
和 pytest-mock
库进行单元测试和模拟 .
想象一下,我在模块 transaction.py
的包 cryptocurrency
中有以下类:
class Transaction:
def __init__(self, test):
self.test = test
并在模块 test_transaction.py
中的另一个包 tests
中进行以下测试:
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.
Mock对象是不是应该监听类实例的初始化并记录它?
编辑:我得到了这个问题的答案,但我有另一个类似的情况仍然无法正常工作 . 想象一下,类 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
处的原始 Transactiion
进行交互 .