J'ai le code unittest suivant en cours d'exécution via py.test. La simple présence du constructeur fait sauter la classe entière lors de l'exécution de py.test -v -s
collecté 0 articles/1 ignoré
Quelqu'un peut-il m'expliquer ce comportement de py.test?
Je suis intéressé à comprendre le comportement de py.test, je sais que le constructeur n'est pas nécessaire.
Merci, Zdenek
class TestClassName(object):
def __init__(self):
pass
def setup_method(self, method):
print "setup_method called"
def teardown_method(self, method):
print "teardown_method called"
def test_a(self):
print "test_a called"
assert 1 == 1
def test_b(self):
print "test_b called"
assert 1 == 1
Comme déjà mentionné dans la réponse de Matti Lyra py.test saute délibérément les classes qui ont un constructeur. La raison en est que les classes ne sont utilisées que pour des raisons structurelles dans py.test et n'ont pas de comportement inhérent, tandis que lors de l'écriture de code, il est l'opposé et beaucoup plus rare de ne pas avoir de méthode .__init__()
pour une classe. Donc, dans la pratique, sauter une classe avec un constructeur sera probablement ce qui était souhaité, généralement c'est juste une classe qui se trouve avoir un nom conflictuel.
Enfin, py.test doit instancier la classe pour exécuter les tests. Si le constructeur prend des arguments, il ne peut pas les instancier, donc encore une fois sauter est la bonne chose à faire.
La documentation de py.test indique que py.test implémente la découverte de test standard suivante:
Test
classes de test préfixées (sans __init__
méthode) [ <- notez celle-ci ici ]test_
les fonctions ou méthodes de test préfixées sont des éléments de testCe n'est donc pas que le constructeur n'est pas nécessaire, py.test ignore simplement les classes qui ont un constructeur. Il y a aussi un guide pour changer la découverte de test standard.