2016-12-06 2 views
1

J'ai beaucoup de difficultés à régler mon test unitaire. J'ai utilisé le patch, mais il ne se comporte pas entièrement comme prévu.Pourquoi assert_called_with échoue-t-il à passer?

J'ai un décorateur en haut de ma fonction de test: @mock.patch('WarningFactory.WarningAPIUpdate') @mock.patch('WarningFactory.SomethingElse') def test_send_tc_update(self, other_mock, api_mock):

Cependant, quand à la fin de ma fonction lorsque je tente de faire l'affirmation suivante:

api_mock.send_warning.assert_called_with('IDQ20026', 'IDQ20026')

Il échoue

Je sais que cela devrait passer parce que je cours

print api_mock.mock_calls

donnant

[call(u'test_api'), call().send_warning('IDQ20026', 'IDQ20026'), call().send_warning('IDQ24500', 'IDQ24500')]

Je peux voir clairement la méthode send_warning étant appelée avec les valeurs correctes, alors pourquoi est mon affirmation échec?

+0

Avez-vous déjà trouvé cette photo? Ayant le même problème – learningKnight

+0

@learningKnight Ajouté une réponse, espérons que cela aide. – user3559247

Répondre

0

En regardant en arrière maintenant le problème était que assert_called_with vérifie seulement l'appel le plus récent.

assert_any_call (* args, ** kwargs) ¶ affirmer la maquette a été appelée avec les arguments spécifiés.

Le assert passe si la maquette n'a jamais été appelé, à la différence assert_called_with() et assert_called_once_with() qui passent que si l'appel est le plus récent, et dans le cas de assert_called_once_with() doit également être le seul appel.

Les documents sont un peu louches car ils ne mentionnent pas selon la méthode de assert_called_with. J'ai fini par utiliser la méthode assert_any_call pour mes tests. J'ai fini par utiliser la méthode assert_any_call.