Toisessa viikkoharjoituksessa on tavoitteena tutustua JUnit:lla testaukseen Eclipse-ympäristössä. JUnit-ympäristö 1. Luo tests -pakkaukseen uusi luokka. Nimeä VHTestit. 2. Laita VHTestit periytymään TestCase:sta (extends TestCase). Importtaa Quick Fix:llä TestCase 3. Luo luokkaan seuraavat funktiot 1. Tämä funktio ajaa luokan (Suite) testitapaukset. public static void main (String[] args) junit.textui.testrunner.run (suite()); 2. Tämä funktio luo luokasta JUnit Suite:n. Eli yhdistää luokassa olevat testitapaukset yhdeksi kokonaisuudeksi. public static Test suite() TestSuite suite = new TestSuite( "VHTestit test suite" ); suite.addtestsuite( VHTestit.class ); return suite; 3. Nämä funktiot toimivat Suiten -ympäristön luomisessa ja sen purkamisessa. protected void setup() throws Exception super.setup(); protected void teardown() throws Exception super.teardown(); 4. Lisää tests -pakkauksessa olevaan AllTests luokkaan VH1Testit (suite.addtest( VHTestit.suite() );). Yhteen Suiteen voidaan lisätä tällä tyylillä useita Suiteja, jolloin testeistä voidaan muodostaa hierarkioita. Koodia testattavaksi Huom! Mikäli olette ehtineet jo koodata omaa koodia näihin funktioihin, laittakaa ne harjoituksen ajaksi kommentteihin! 1. XMLException palauttamaan virheilmoitus: public String getexception() return "XMLException:" + exception_; Lisäksi rakentaja ja private -muuttuja private String exception_; public XMLException( String exception ) exception_ = exception;
2. XMLService:n funktiot add() ja search() toimimaan seuraavanlaisesti: public void add( Page page ) throws XMLException if( page.getid().equals("abc-123-1234") ) throw new XMLException( "Page id is already in use!!"); else if( page.getkey().equals("go") ) throw new XMLException("Page key is already in use!"); public Page search( String searchkey ) throws XMLException if( searchkey.equals( go ) ) throw new XMLException(" Page was not to be found!"); else if( searchkey.equals( tty ) ) throw new XMLException( "Found more than one pages!" ); Page p = new Page("abc-123-1235", "Hesari", "hs", "http://www.hs.fi"); return p; Testitapausten teko 1. Tee seuraavat VHTestit -luokkaan: 2. Alusta JUnit-ympäristö ( setup() ) seuraavanlaisesti: protected void setup() throws Exception super.setup(); handler_ = new XMLService( "t.xml", "t.xsd" ); p1 = new Page("abc-123-1233", "Google", "go", "http://www.google.fi"); p2 = new Page("abc-123-1234", "TTY", "tty", "http://www.tut.fi"); p3 = new Page("abc-123-1235", "Hesari", "hs", "http://www.hs.fi"); sekä seuraavat private -muuttujat: private XMLService handler_; private Page p1; private Page p2; private Page p3; 3. Pura JUnit-ympäristön tekemät varaukset ( teardown() ) seuraavanlaisesti: protected void teardown() throws Exception super.teardown();
handler_ = null; p1 = null; p2 = null; p3 = null; 4. Luo seuraavat testitapaukset VHTestit-luokkaan: // Testitapausten pitää alkaa määreellä 'test'. public void testaddsuccess() handler_.add( p2 ); // Fail-käskyllä voidaan itse aiheuttaa testin epäonnistuminen fail("there was an unexpected error in add()!"); public void testsearchsuccess() String message = "Pages are not equal!"; Page page = handler_.search( "hs" ); // Asserteilla voidaan testata onnistuiko tehtävä. Tässä vertaillaan kahta // Page:a, jos ne eivät ole yhtä suuret ilmoitetaan siitä virheviestillä. assertequals( message, page, p3 ) ; fail("there was an unexpected error in search()!"); String message = "Pages are not equal!"; Page page = handler_.search( "go" ); assertequals( message, page, p1 ) ; fail("there was an unexpected error in search()!"); public void testaddfailure()
handler_.add( p1 ); handler_.add( p2 ); //Ilmoitetaan että tämä oli tahallinen virhe. asserttrue( "This is an intentional error!", false ); public void testsearchfailure() Page page = handler_.search( "go" ); Page page = handler_.search( "tty" ); Testitapausten ajo ja tulosten tulkinta 1. Testitapauksia voidaan ajaa kolmella eri tapaa: 1. Yksi testitapaus kerrallaan: Valitse luokka jossa testitapaukset sijaitsevat. Klikkaa Outline -näkymä päälle -> klikkaa haluamisi testitapauksen kohdalla oikeata hiiren nappia -> valitse Run As->JUnit Test 2. Yksi Suite kerrallaan: Klikkaa hiiren oikeata nappia haluamasi luokan kohdalla ja valitse Run As->JUnit Test 3. Monta Suite:a kerralla: Samalla tavalla kuin kohdassa 2, mutta luokka johon olet
lisännyt useita Suite:ja esim. AllTests. 2. Aja tavalla 2 VHTestit 3. Testaustulosten tulkinta. JUnit Test:n ajaminen aukaisee JUnit -näkymän, josta nähdään testauksen tulokset. Failures -kohdasta voidaan tarkastella missä testitapauksissa syntyi odottamattomia virheitä. Hierarchy-kohdasta nähdään testauksen hierarkia. Eclipsen Consolista voidaan lukea System.out:a, mikäli sellaista jossain syötetään. Kuvasta (1.1) nähdään JUnit testiajon tulokset. Ajossa on tapahtunut kolme Failure:a ja yksi testitapaus mennyt läpi puhtain paperein. Klikkaamalla epäonnistunutta testitapausta saadan näkyviin Failure Trace, joka kertoo missä mentiin metsään. Runs kohta tarkoittaa että kaikki testit ajettiin läpi 4 kertaa. Errors kohta kertoo tapahtuiko testauksessa virheitä. Kuva 1.1 JUnit -näkymä Nyt tehdyistä testeistä pitäisi löytyä kaksi ei tahallista virhettä. TestAddSuccess() ja TestSearchSuccess()- testitapausten pitäisi päätyä failureen.