⌛⌛ 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.

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ään String-luokan compareTo-funktiolla.

  • Julkinen rakentaja Attainment(String courseCode, String studentNumber, int grade).

    • Alustaa Attainment-olioon parametreina saamansa 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 "kurssikoodi opiskelijanumero arvosana" olevan merkkijonon.

Määrittele JUnit-testiluokassasi Attainment-luokalle seuraavia seikkoja tutkivat testit:

  • Kun Attainment-olio on luotu, täsmäävätkö funktioiden getCourseCode, getStudentNumber ja getGrade 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-luokan toString-funktio oikeaa muotoa olevan merkkijonoesityksen?

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