ich finde einfach keinen richtigen Zugang zum Schreiben von Tests... Zum Testen meiner recurrence-Klassen habe ich bisher folgendes verwendet:
Code: Alles auswählen
import sys
sys.path.append('/home/mutetella/Daten/denkdran/src')
from dt import DateTimeScope as dts
from recurrence import (
DailyRecurrence as dr, WeeklyRecurrence as wr,
MonthlyRecurrence as mr, YearlyRecurrence as yr
)
def check(recurrence, expected, results):
assert len(expected) == len(results)
for result, expected in zip(results, expected):
assert result == expected
def test_daily_01():
b = dts((2014, 3, 31), ())
v = ((2014, 3, 31), (9999, 12, 31))
q = dts((2014, 3, 24), (2014, 4, 14))
tests = (
(dr(base=b, validity=v, interval=1, count=None),
(dts((2014, 3, 31), ()), dts((2014, 4, 1), ()),
dts((2014, 4, 2), ()), dts((2014, 4, 3), ()),
dts((2014, 4, 4), ()), dts((2014, 4, 5), ()),
dts((2014, 4, 6), ()), dts((2014, 4, 7), ()),
dts((2014, 4, 8), ()), dts((2014, 4, 9), ()),
dts((2014, 4, 10), ()), dts((2014, 4, 11), ()),
dts((2014, 4, 12), ()), dts((2014, 4, 13), ()),
dts((2014, 4, 14), ())
)
),
(dr(base=b, validity=v, interval=2, count=None),
(dts((2014, 3, 31), ()), dts((2014, 4, 2), ()),
dts((2014, 4, 4), ()), dts((2014, 4, 6), ()),
dts((2014, 4, 8), ()), dts((2014, 4, 10), ()),
dts((2014, 4, 12), ()), dts((2014, 4, 14), ()),
)
),
(dr(base=b, validity=v, interval=3, count=None),
(dts((2014, 3, 31), ()), dts((2014, 4, 3), ()),
dts((2014, 4, 6), ()), dts((2014, 4, 9), ()),
dts((2014, 4, 12), ())
)
)
)
for recurrence, expected in tests:
results = []
for query in q:
for result in recurrence._query(query):
results.append(result)
yield check, recurrence, expected, results
Jetzt suche ich nach einer Möglichkeit, einen Test zu schreiben, dem ich die verschiedenen Testbedingungen (`dr`, `q`ueries und `expected`) übergebe. Bis jetzt habe ich das:
Code: Alles auswählen
class TestDaily(object):
def setup_class(self):
self.dr = dr(base=dts((2014, 3, 31), ()),
validity=((2014, 3, 31), (9999, 12, 31)),
interval=1, count=None)
self.queries = dts((2014, 3, 24), (2014, 4, 14))
self.expected = (
dts((2014, 3, 31), ()), dts((2014, 4, 1), ()),
dts((2014, 4, 2), ()), dts((2014, 4, 3), ()),
dts((2014, 4, 4), ()), dts((2014, 4, 5), ()),
dts((2014, 4, 6), ()), dts((2014, 4, 7), ()),
dts((2014, 4, 8), ()), dts((2014, 4, 9), ()),
dts((2014, 4, 10), ()), dts((2014, 4, 11), ()),
dts((2014, 4, 12), ()), dts((2014, 4, 13), ()),
dts((2014, 4, 14), ())
)
def get_results(self):
for query in self.queries:
for result in self.dr._query(query):
yield result
def check(self, expected, result):
assert expected == result
def test(self):
results = tuple(self.get_results())
assert len(self.expected) == len(results)
for expected, result in zip(self.expected, results):
yield self.check, expected, result
Ich weiß einfach nicht, wie ich da 'rangehen soll! Das, was ich testen möchte, ist ja immer dasselbe, nur die verschiedenen Szenarien und daraus folgend die vielen zu testenden Resultate bekomme ich nicht strukturiert!
mutetella