- COMP.CS.140
- 11. Toimiva ohjelma
- 11.2 ⌛⌛ Kurssisuorituksen JUnit-testaus
⌛⌛ Kurssisuorituksen JUnit-testaus¶
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ä.
Aseta JUnit-testiluokkasi Maven-projektin hakemistorakenteen mukaisesti alihakemistoon
round11\junitattainment\src\test\java\fi\tuni\prog3\junitattainment
. Voit nimetä luokkasi
vapaasti tai hyväksyä esimerkiksi NetBeansin tarjoaman luokkanimen. On kuitenkin suositeltavaa
päättää luokkanimi merkkijonoon Test.java (esim. AttainmentTest.java), muuten Junit ei välttämättä
tunnista sitä testiluokaksi.
Materiaalien etätietovaraston round11\junitattainment
-hakemistossa on annettu
testimateriaalia, josta kerrotaan tarkemmin alempana.
Luokalla Attainment
odotetaan olevan seuraavat ominaisuudet:
Kuuluu pakkaukseen
fi.tuni.prog3.junitattainment
.Toteuttaa rajapinnan
Comparable<Attainment>
.Toteuttaa funktion
compareTo
siten, että se vertailee ensisijaisesti opiskelijanumeroita ja toissijaisesti kurssikoodeja. Sekä opiskelijanumeron että kurssikoodin vertailu tehdäänString
-luokancompareTo
-funktiolla.
Julkinen rakentaja
Attainment(String courseCode, String studentNumber, int grade)
.Alustaa
Attainment
-olioon parametreina saamansa 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
"kurssikoodi opiskelijanumero arvosana"
olevan merkkijonon.
Määrittele JUnit-testiluokassasi Attainment
-luokalle seuraavia seikkoja tutkivat testit:
Kun
Attainment
-olio on luotu, täsmäävätkö funktioidengetCourseCode
,getStudentNumber
jagetGrade
palauttamat arvot rakentajalle välitettyjen arvojen kanssa?Heittääkö
Attainment
-luokan rakennin tyyppiäIllegalArgumentException
olevan poikkeuksen, jos jokin sille annettu parametri on laiton?Palauttaako
Attainment
-luokantoString
-funktio oikeaa muotoa olevan merkkijonoesityksen?Toimiiko
Attainment
-luokancompareTo
-funktio 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. Toteutus ei ole valmiiksi annettujen
Attainment
-luokkien tavukoodien (katso alla) ansiosta välttämätöntä, jos ajat testit komentoikkunasta.
Testauksesta¶
Voit hyödyntää testien toteutuksessa ja ajossa tehtävän aineiston testfiles
-alihakemistossa
annettuja Attainment
-luokan 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
annettu JUnit-testikehyksen JAR-kirjasto junit-platform-console-standalone-1.8.2.jar
. Jos kopioit sen
vastauksesi juurihakemistoon ja jonkin valmiin Attainment
-luokan luokkatiedoston
target\classes\fi\tuni\prog3\junitattainment
-hakemistoon, onnistuu testikoodin kääntäminen esimerkiksi komennolla
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 komennolla
java -jar junit-platform-console-standalone-1.8.2.jar -cp target/classes/;target/test-classes -p fi.tuni.prog3.junitattainment
.
(Mac- ja Linux-käyttäjät: edellä annetuissa komennoissa tulee käyttää kaksoispistettä :
puolipisteeen ;
asemasta.)
Voit vaihtaa testattavaa Attainment
-luokan toteutusta yksinkertaisesti kopioimalla eri
luokkatiedoston target\classes\fi\tuni\prog3\junitattainment
-hakemistoon.
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.