- COMP.CS.140
- 11. Toimiva ohjelma
- 11.2 ⌛⌛ Kurssisuorituksen JUnit-testaus
⌛⌛ Kurssisuorituksen JUnit-testaus¶
Aseta koodisi Maven-projektin hakemistorakenteen mukaisesti alihakemistoon
Round11/junitattainment/src/test/java/fi/tuni/prog3/junitattainment
. Hae tehtävän materiaalit
``student_template_project``sta.
Tässä tehtävässä kokeillaan JUnit-testien määrittämistä kurssisuoritusta kuvaavalle luokalle
Attainment
, joka on lähes samanlainen kuin parissa aiemmassa tehtävissä.
Luokalla Attainment
odotetaan olevan seuraavat ominaisuudet:
Kuuluu pakkaukseen
fi.tuni.prog3.junitattainment
.Toteuttaa rajapinnan
Comparable<Attainment>
.Rajapinnan funktio
compareTo
vertailee ensisijaisesti opiskelijanumeroita ja toissijaisesti kurssikoodeja. Vertailut tehdäänString
-luokancompareTo
-funktiolla.
Julkinen rakennin
Attainment(String courseCode, String studentNumber, int grade)
.Alustaa
Attainment
-olioon rakentimen parametreina saamat kurssikoodin, opiskelijanumeron ja arvosanan.Heittää tyyppiä
IllegalArgumentException
olevan poikkeuksen, joscourseCode
taistudentNumber
onnull
, tai josgrade
ei ole välillä 0…5.
Julkiset jäsenfunktiot
String getCourseCode()
,String getStudentNumber()
jaint getGrade()
.Palauttavat nimiensä mukaiset arvot eli kurssisuorituksen kurssikoodin, opiskelijanumeron ja arvosanan.
Julkinen jäsenfunktio
String toString()
.Palauttaa kurssisuoritusta kuvaavan muotoa “
courseCode studentNumber grade
” olevan merkkijonon (huomaa, että tässä ei ole rivinvaihtomerkkiä).
Määritä luokasta Attainment
seuraavia seikkoja testaavat JUnit-testit:
Kun
Attainment
-olio on luotu, täsmäävätkö funktioidengetCourseCode
,getStudentNumber
jagetGrade()
palauttamat arvot rakentimelle välitettyjen arvojen kanssa?Heittääkö
Attainment
-luokan rakennin tyyppiäIllegalArgumentException
olevan poikkeuksen, jos jokin sille annettu parametri on laiton?Palauttaako
Attainment
-luokantoString
oikeaa muotoa olevan merkkijonoesityksen?Toimiiko
Attainment
-luokancompareTo
halutulla tavalla?
Huomaa, että tässä tehtävässä pääasia on testien määritys. Voit halutessasi toteuttaa myös luokan
Attainment
(se voi helpottaa testien laadintaa), mutta se ei ole valmiiksi annettujen
Attainment
-luokkien toteutuksien (kts. alla) ansiosta välttämätöntä.
Testauksesta¶
Voit hyödyntää testien toteutuksessa ja testaamisessa tehtävän aineiston alihakemistossa
testfiles
annettuja luokan Attainment
toteutuksia. Toteutukset on annettu valmiiksi
käännettyinä luokkatiedostoina. Alihakemistossa testfiles/0
on oikein toimiva versio, ja
muissa alihakemistoissa olevat versiot rikkovat ylempänä kuvattuja testitapauksia.
Vaikka palautus pyydetään Maven-projektia vastaavassa hakemistorakenteessa, sinun ei ole tehtävää
tehdessäsi pakko käyttää Mavenia koodin kääntämiseen ja testaamiseen. Tehtävän aineiston mukana on
JUnit-testikehyksen jar-kirjasto junit-platform-console-standalone-1.8.2.jar
. Jos kopioit sen
vastauksesi juurihakemistoon ja jonkin valmiin Attainment
-luokan luokkatiedoston alihakemistoon
target/classes/fi/tuni/prog3/junitattainment
, onnistuu testikoodin kääntäminen esim. tapaan
javac -cp target/classes:junit-platform-console-standalone-1.8.2.jar -d target/test-classes -sourcepath src/test/java src/test/java/fi/tuni/prog3/junitattainment/*.java
ja tämän jälkeen testien suoritus tapaan
java -jar junit-platform-console-standalone-1.8.2.jar -cp target/classes/:target/test-classes -p fi.tuni.prog3.junitattainment
.
Voit vaihtaa testattavaa Attainment
-luokan toteutusta yksinkertaisesti kopioimalla eri
luokkatiedoston alihakemistoon target/classes/fi/tuni/prog3/junitattainment
.
Automaattiset testit pohjautuvat samoihin valmiiksi annettuihin Attainment
-luokan toteutuksiin.
Saat tehtävästä täydet pisteet, jos JUnit-testisi eivät löydä virheitä alihakemiston
testfiles/0
toteutuksesta mutta löytävät virheitä kaikista muista valmiiksi annetuista
toteutuksista.
A+ esittää tässä kohdassa tehtävän palautuslomakkeen.