0
我想测试模拟对象是否被另一个模拟对象调用。测试模拟是否被其他模拟调用
@patch(__name__ + '.xero_helper.PublicCredentials')
@patch(__name__ + '.xero_helper.Xero')
def testGetValidPublicXeroInstance(self, XeroMock, CredentialsMock):
xero_helper.get_xero_instance('abc') # Do relevant stuff
CredentialsMock.assert_called_with(**org.oauth_credentials) # OK
XeroMock.assert_called_once() # OK
XeroMock.assert_called_with(CredentialsMock) # Not OK
前两个assert
的妙传,而最后一个给人以
AssertionError: Expected call: Xero(<MagicMock name='PublicCredentials' id='4377636560'>)
Actual call: Xero(<MagicMock name='PublicCredentials()' id='4377382544'>)
什么是验证XeroMock
被称为与CredentialsMock
正确的方法是什么?
在未来,请提供代码也在测试中;我可以从断言错误中找出问题所在,但实际代码(或者替代它,产生相同的输出)会更容易。这被称为[MCVE]。 –
另一种选择可能是重构代码,所以除了'@ patch'之外,还有其他替代方法可以注入模拟。一个受欢迎的可能是依赖注入。也许'get_xero_instance'可以接受'** kwargs'并允许调用者提供'CredentialsMock'实例? – dm03514