Seite 1 von 1

Decorator mit Argument aufrufen...

Verfasst: Dienstag 11. März 2014, 09:49
von mutetella
Hallo,

zum Testen monatlicher Wiederholungen verwende ich folgendes

Code: Alles auswählen

marker = pytest.mark.parametrize('queries, expected')
@marker(weekday_scenario)
def test_monthly_recurrences(queries, expected):
    assert queries == expected
`weekday_scenario` besteht aus zwei Listen mit `datetime` Objekten, die jeweils übereinstimmen müssen. Soweit so gut. Nun habe ich neben `weekday_scenario` auch ein `monthday_scenario`. Wie kann ich beide getrennt voneinander testen?

mutetella

Re: Decorator mit Argument aufrufen...

Verfasst: Freitag 14. März 2014, 09:17
von mutetella
Guten morgen,

ich muss Euch leider nochmals mit diesem Problem kommen... bin total blockiert! :?

Wie kann ich in meinem Beispiel dem Decorator `marker` verschiedene Argumente geben? Ich habe sowas versucht, was aber auch nicht klappt:

Code: Alles auswählen

marker = pytest.mark.parametrize('queries, expected')
def run(scenario):
    @marker(scenario)
    def test_(queries, expected):
        assert queries == expected

def test_run():
    run(weekday_scenario)
    run(monthday_scenario)
Ich steh' wie der Ochs' vorm Berg, weil ich zum einen mit Dekoratoren nicht wirklich klar komme und zum anderen (wahrscheinlich) kein gutes Konzept habe, wie ich mit `py.test` umgehen könnte. Letztlich möchte ich ja erstmal nur `datetime` Objekte links mit `datetime` Objekten rechts vergleichen...

mutetella

Re: Decorator mit Argument aufrufen...

Verfasst: Freitag 14. März 2014, 15:48
von bwbg
Auch, wenn ich keine Ahnung habe, was Du vor hast ...

Dekoratoren sind, wie Du weißt, Funktionen, welche ausschließlich eine Funktion entgegen nehmen und als Ergebnis eine Funktion zurück geben:

Code: Alles auswählen

@g
def f(x):
    pass

# ist gleichbedeutend mit

def f(x):
    pass

f = g(f)
"Dekoratoren" mit Parametern, sind Funktionen, welche "echte" Dekoratoren zurückgeben:

Code: Alles auswählen

@g(x)
def f(y):
    pass

# ist gleichbedeutend mit

def f(y):
    pass

h = g(x)
f = h(f)
Diese einzelnen Aufrufe lassen (oder sollten) sich getrennt voneinander testen lassen; völlig gleichgültig, welches test-framework man verwendet.

Grüße ... bwbg

Re: Decorator mit Argument aufrufen...

Verfasst: Dienstag 18. März 2014, 08:47
von mutetella
@bwbg
Aufgrund Deiner Antwort hab' ich mich dazu überwunden, mich nochmals etwas näher mit diesen sch... Dekoratoren zu beschäftigen und ich glaube fast, dass mein Problem beim Testen nicht die pytest fixtures, also Dekoratoren, sind.

mutetella