172 votes

Affirmer une fonction/méthode n'a pas été appelée à l'aide de Maquette

Je suis à l'aide de la Maquette de la bibliothèque pour tester mon application, mais je tiens à affirmer que la fonction n'a pas été appelé. Maquette docs parler de méthodes comme l' mock.assert_called_with et mock.assert_called_once_with, mais je n'ai pas trouver quelque chose comme mock.assert_not_called ou quelque chose lié à vérifier fantaisie est PAS appelé.

Je pourrais aller avec quelque chose comme ce qui suit, mais il ne semble pas cool ni pythonic:

def test_something:
    # some actions
    with patch('something') as my_var:
        try:
            # args are not important. func should never be called in this test
            my_var.assert_called_with(some, args)
        except AssertionError:
            pass  # this error being raised means it's ok
    # other stuff

Toutes les idées sur la façon de l'accomplir?

Merci pour toute aide :)

177voto

Joachim Isaksson Points 85969

Cela devrait fonctionner pour votre cas;

assert not my_var.called, 'method should not have been called'

De l'échantillon;

>>> mock=Mock()
>>> mock.a()
<Mock name='mock.a()' id='4349129872'>
>>> assert not mock.b.called, 'b was called and should not have been'
>>> assert not mock.a.called, 'a was called and should not have been'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AssertionError: a was called and should not have been

32voto

Rob Kennedy Points 107381

Vous pouvez vérifier l' called d'attribut, mais si votre assertion échoue, la prochaine chose que vous voulez savoir, c'est quelque chose au sujet de l'inattendu, alors vous pouvez ainsi organiser pour que les informations soient affichées depuis le début. À l'aide de unittest, vous pouvez vérifier le contenu de call_args_list à la place:

self.assertItemsEqual(my_var.call_args_list, [])

Lorsqu'il échoue, il donne un message comme ceci:

AssertionError: Élément compte ne sont pas égales:
Premier a 0, a 1 Seconde: appelez le('premier argument', 4)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X