3.3. Tehtävä: Funktion weekdays
testaaminen (130 p)
Tästä sivusta:
Mitä käsitellään? Testausta
Mitä tehdään? Kirjoitetaan testejä valmiina annetulle osittain virheelliselle koodille
Suuntaa antava vaativuusarvio: Keskivaikea.
Suuntaa antava työläysarvio: 1-2 tuntia
Pistearvo: 130 pistettä
Intro
Tässä tehtävässä perehdytään yksikkötestaukseen. Kannattaa perehtyä ensin lukuun Pythonin testausvälineet, jossa kerrotaan Pythonin
unittest
-luokasta. Saat pienen pätkän valmista virheellistä koodia ja laadit yksikkötestit, jotka paljastavat koodissa olevat viat.
Tehtävässä käytetään Pythonin kirjaston modulin datetime luokkia date ja timedelta. Erityisesti kannattaa perehtyä Date -luokan weekday-metodiin.
Osatehtävä 1 (100p)
Tarkastellaan oheista funktiota, jonka on tarkoitus palauttaa listassa annettujen päivämäärien start
ja end
väliin osuvat arkipäivät. Myös start
ja end
kuuluvat tulokseen, mikäli ne sattuvat olemaan arkipäiviä.
from datetime import timedelta
def weekdays(start, end):
'''
Parameters start and end are date objects.
Returns a sequence of all dates between
start and end inclusively that are
weekdays (Mon, Tue, Wed, Thu, Fri).
'''
result = []
current = start
oneday = timedelta(days=1)
while True:
if current.weekday() <= 5:
result.append(current)
current = current + oneday
if current >= end:
return result
Koodissa on kuitenkin kaksi virhettä. Tee kaksi testimetodia, jotka paljastavat nämä virheet. Pidä huolta, että kumpikin metodi yksinään paljastaa virheistä vain toisen.
Miten pääset alkuun testien laatimisessa?
Kokeile vaikka ensin ajaa funktiota Pythonissa. Katso kalenterista joku aikaväli ja siinä esiintyvät arkipäivät sekä ei-arkipäivät. Kun sinulla on käsitys, mitä funktion pitäisi tuottaa ja mitä se tuottaa, voit kirjoittaa testit.
Annetut tiedostot
Saat valmiina koodina tiedoston weekdays.py, jossa on yllä oleva virheellinen koodi sekä
tiedoston test_weekdays.py, joka sisältää tyhjän luokan TestWeekdays
, jonka sisään
kirjoitat koodisi.
Palautettava tiedosto
Osatehtävä 2 (30p)
Korjaa funktion weekdays
virheet ja palauta se.