Comment gérer plusieurs assertions dans un seul unittest Python?

C'est un problème qui est survenu lors de la réalisation d'un seul test qui a eu de multiples indépendant des modes de défaillance, en raison d'avoir plusieurs flux de sortie. Je voulais aussi montrer les résultats d'affirmer que les données sur tous les modes, indépendamment de l'échec de la première. Python unittest n'a pas cette fonctionnalité en dehors de l'aide d'une série de représenter le seul test, ce qui est inacceptable, car mon seul test toujours nécessaires pour être exécuté comme une seule unité, il n'a tout simplement pas compte de la nature de la chose.

Un exemple pratique est le test d'un objet qui génère également un journal. Vous souhaitez faire valoir la sortie de ses méthodes, mais vous voulez aussi faire valoir la sortie du journal. Les deux sorties nécessitent différents tests, ce qui peut être bien exprimé par deux du stock affirme expressions, mais vous ne voulez pas que la défaillance de l'un à masquer l'échec possible de l'autre dans le test. Si vous avez vraiment besoin de tester les deux en même temps.

J'ai bricolé ce petit widget pour résoudre mon problème.

def logFailures(fnList):
    failurelog = []
    for fn in fnList:
        try:
            fn()
        except AssertionError as e:
            failurelog.append("\nFailure %d: %s" % (len(failurelog)+1,str(e)))

    if len(failurelog) != 0:
        raise AssertionError(
            "%d failures within test.\n %s" % (len(failurelog),"\n".join(failurelog))
        )

Qui est utilisé comme suit:

def test__myTest():
    # do some work here
    logFailures([
        lambda: assert_(False,"This test failed."),
        lambda: assert_(False,"This test also failed."),
    ])

Le résultat est que logFailures() génère une exception qui contient l'historique de toutes les affirmations qui ont été soulevées dans les méthodes de la liste.

La question: bien que ce fait le boulot, je me demande si il ya une meilleure façon de gérer cela, d'autres que d'avoir à aller à la longueur de la création de imbriquée de suites de tests et ainsi de suite?

source d'informationauteur Eric Anderton