2 votes

Enregistrer et affirmer une liste fictive vide en python unittest

J'utilise unittest y mock (module de Michael Foord) pour tester du code python.

J'ai quelque chose comme ça (c'est une preuve de concept qui pourrait être réécrite plus proprement, mais mon code réel doit se comporter comme ça). foo ) :

import unittest
from mock import patch

def foo():
    my_list = []

class Test(unittest.TestCase):
    def test_foo(self):
        with patch('__main__.my_list', new=[], create=True) as baz:
            baz.extend(['foo', 'bar'])

            self.assertEqual(foo(), None)
            self.assertListEqual([], baz)

if __name__ == '__main__':
    unittest.main()

Le problème est donc que mon baz ne change pas en conséquence après que l'objet fictif foo() et la dernière assertion échoue.

Si j'utilise my_list.remove(x) en foo() alors je peux voir les changements dans mon cas de test, mais je veux juste vider cette liste, je ne veux pas passer par chaque élément de la liste puis le supprimer, non, je veux une opération de vidage rapide.

Comment puis-je vérifier si mon objet fantaisie est vidé sans utiliser la fonction .remove(x) mais en utilisant l'implémentation actuelle de la fonction foo ?

1voto

Paul Points 3329

Je finis donc par répondre à ma propre question...

La solution consistait à utiliser my_list[:] = [] en foo .

Mais je me suis également rendu compte que le fait de passer create=True est mauvais car si cette liste n'existe pas (exactement le cas de ce POC), elle sera créée et je testerai peut-être un code cassé qui passe les tests.

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