Wie kann ich einen Testdurchlauf in einzelne Teile aufteilen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

Hallo,

diese pytest-Geschichte macht mich noch wahnsinnig! Ich hab' geglaubt, wenigstens grundlegend mit Python umgehen zu können. Aber seitdem ich pytest installiert habe, fühle ich mich wie der totale Nullchecker!!

Ich habe eine Testfunktion geschrieben, die verschiedene monatliche Wiederholungen erstellt, für einen bestimmten Zeitraum (`search_scope`) Treffer abfragt und deren Startzeitpunkte (`s.begin`) mit einer Liste der korrekten Treffer (`monthday_range`) vergleicht:

Code: Alles auswählen

def test_monthly_monthday():
    search_scope = dt.DateTimeScope({'year': 2009, 'month': 6, 'day': 1},
                                    {'year': 2016, 'month': 6, 'day': 30})
    for interval, monthday in itertools.product(range(1, 13), range(1, 32)):
        recurrence_ = recurrence.MonthlyRecurrence(
            **{'base': dt.DateTimeScope({'year': 2009, 'month': 12, 'day': 28},
                                        {'year': 2009, 'month': 12, 'day': 30}),
               'interval': interval, 'monthday': monthday})
        assert (
            [s.begin for s in recurrence_.query(search_scope)] ==
            [datetime_ for datetime_ in
             monthday_range((2009, 12), (2016, 6), monthday, interval)]
        )
Nun möchte ich die einzelnen Wiederholungen separat testen, damit ich im Falle eines Fehlers auch nachvollziehen kann, innerhalb welcher Wiederholung (welcher `interval`, welcher `monthday`) dieser Fehler aufgetreten ist. Ich kann aber doch nicht für jeden dieser Fälle eine eigene Testfunktion erstellen? Wie komme ich aber an nähere Informationen im Fehlerfall?

Code: Alles auswählen

assert left == right, info
hilft mir nicht, da mit pytest dann wiederum nicht sagt, welches Element der Liste einen Fehler provoziert.

Mit der pytest Dokumentation komm' ich auch nicht wirklich klar, die setzt IMHO viel zu viel Test-Vorwissen voraus.

mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
BlackJack

@mutetella: `py.test` versteht auch Testgeneratoren wie man sie von `nose` kennt: https://nose.readthedocs.org/en/latest/ ... generators
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

@BlackJack
Jepp, genau sowas hab' ich gesucht und selbst jetzt, da ich weiß, dass es das gibt, finde ich in der `py.test` Dokumentation nichts in der Richtung. Diese Testframeworks folgen schon ganz eigenen Regeln und Pfaden, die nicht immer "python-like" sind, oder?

mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
BlackJack

@mutetella: Ich habe bei `py.test` auch nichts darüber in der Dokumentation gefunden, ausser dem Hinweis auf `nose`. Von da kenne ich dieses Feature und ich wusste auch das `py.test` das versteht. Sehen die bei `py.test` offenbar nur als Unterstützung eines „Fremdfeatures” an.
Antworten