⌛⌛ 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ään String-luokan compareTo-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, jos courseCode tai studentNumber on null, tai jos grade ei ole välillä 0…5.

  • Julkiset jäsenfunktiot String getCourseCode(), String getStudentNumber() ja int 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ö funktioiden getCourseCode, getStudentNumber ja getGrade() 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-luokan toString oikeaa muotoa olevan merkkijonoesityksen?

  • Toimiiko Attainment-luokan compareTo 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.