我试图测试我的类的构造函数的成功调用,但它没有被记录在我的Mock对象中 . 我分别使用 pytestpytest-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 进行交互 .