Eclipse ja JUnit-ohjelmoijatestit

Tarkoitus on tutustua Eclipsen käyttöön vähän lähemmin ja varsinkin JUnit-ohjelmoijatesteihin (ohjelmoijatesti on vanhalta nimeltä yksikkötesti). Ohjelmoijatestit ovat perin käteviä muokattaessa paljon ohjelmakoodia, sillä niiden avulla voi varmistaa, etteivät muutokset riko ohjelman toimintaa. Ne ovat myös hyvä dokumentointiväline, ja auttavatpa ne vielä hyvin mutkikkaalla tavalla: on huomattu, että jos ohjelmoijatestin tekeminen on hankalaa, on testikohteessa jotain muutakin vikaa, ja se kannattaa uudelleentyöstää.

Eclipse

Käynnistä Eclipse. Käynnistymisen yhteydessä tulee valita Eclipsen työskentelyalue.

Valitse alueeksi kiintolevyn juuren tmp- tai temp-hakemisto, jollet halua tulosten säilyvän, tai jokin hakemisto omassa hakemistopuussasi. Viimeinen osa polussa on uusi hakemisto, jonka Eclipse luo, ja yleensä nimeltään workbench, vaikka voit kyllä nimetä sen vaikka isomman projektiryppään mukaan (esim. tie343). Tärkeää on, ettet valitse oletushakemistoa, tai jonkun muun käyttämää hakemistoa.

Eclipsen käynnistys ja työskentelyalueen valinta.

Tämän jälkeen tulee esille valikko, josta voit valita yleisoppaan tai jonkin erikoisoppaista, tai Eclipsen kehitinnäkymän. Lue ja tutustu osioihin Overview (yleisopas) ja Build a simple Java application. Älä oi'o Java-tutoriaalissa, vaan koeta kestää tehdä kaikki ohjeiden mukaan.

JUnit ohjelmoijatestit

Tämän osion aikana tehdään yksinkertainen autolaskuri (yllätys). Ei nyt innostuta graafisesta käyttöliittymästä, vaan tehdään vain pieni laskuriolio. Oikeastaan, ei tehdä itse, vaan teetetään suurelta osin Eclipsellä. Ensin on aina kuva tilanteesta, sitten selitys. Koeta kestää mukana, äläkä oio, vaikka mieli tekisi. (OK, sen tekemäni virheen voit jättää tekemättä.)

Teksti alla on järjestetty siten, että ensin tulee kuva, sitten kuvaan liittyvä teksti. JUnitin kotisivut löytyvät osoitteesta http://www.junit.org/, josta löytyy myös kasoittain hyvää dokumentaatiota ja opastusta JUnitin käyttöön. Esimerkiksi http://junit.sourceforge.net/doc/testinfected/testing.htm kertoo sen mitä tämä teksti ja paljon enemmän, mutta ilman kehitysympäristösidonnaista toimintaa. Suosittelen sitä luettavaksi. Kuva1.png

Aloita luomalla uusi projekti nimeltä autolaskuri. Ensimmäisen sivun Finnish kelpaa; tarkempia asetuksia ei tarvita.

Kuva2.png

Kun projekti on valmis, valitse projektin valikko hiiren valikkonäppäimellä (yleensä oikeanpuoleisin), ja valitse valikosta New - JUnit Test Case.

Kuva3.png

Jos junit.jar ei ole jo polussa, ehdottaa Eclipse sen liittämistä polkuun. Hyväksy liitos.

Kuva4.png

Anna luokalle nimeksi TestLaskuri ja paketille, johon luokka tulee, anna nimeksi testit. Jälleen Finnish ensimmäisessä ruudussa on kelvollinen.

Tee luokkaan metodi public void testLuonti(), joka testaa Laskuri-olion luonnin onnistumista. Metodista TestCase.assertEquals on apua. Koeta ensin tehdä metodi itse, katson vastaus kuvasta, jos ei meinaa onnistua.


Kuva7.png

Ohjelmassa on virheitä. Jos katsot lähdekoodinäkymän vasenta marginaalia, näkyy siellä lamppu-rasti -ikoneita samojen rivien kohdalla, joissa on puna-aaltoviivalla merkittyjä virheitä. Klikkaa ikonia, ja esille ponnahtaa joukko vaihtoehtoja automaattisiksi korjauksiksi. Vieressä näet keltaisella pohjalla korjauksen vaikutuksen. Valitse Create class "Laskuri" kaksoisklikkaamalla sitä.

Kuva8.png

Kuvaruudulle aukeaa uuden javaluokan luontidialogi. Asetusten pitäisi olla muuten kunnossa, mutta muuta paketin nimeksi luokat; paremmankin nimen voisi keksiä...

Kuva9.png

Jätä uusi luokka sellaiseksi kuin Eclipse sen generoi. Palaa TestLaskuri luokan pariin, vielä kaikkia virheitä ei ole korjattu - ja Eclipsen saa vielä korjaamaan niitä joukon ohjelmoijan puolesta ;)

Kuva10.png

Seuraava virhe on, ettei Laskuri-luokalla ole rakenninta, ...

Kuva11.png

... ja sekin hoituu Eclipsen automaattisilla korjauksilla (se lamppu-rasti -ikoni).

Kuva12.png

Huomio laatikot generoidun metodin nimen, sekä ainoan parametrin tyypin ja nimen ympärillä. Metodin nimi on valittuna, voit muokata sitä, joskaan tarvetta ei ole.

Kuva13.png

Parametrin tyyppiin, seuraavaan laatikkoon, voi siirtyä painamalla TAB-näppäintä. Muuta parametrin nimeksi kohde.

Kuva14.png

Rakentimen toiminta ei ole kummoinen, sijoitetaan parametrin kohde arvo jäsenmuuttujan (atribuutin) kohde arvoksi. Tallenna, ja jäsenmuuttujan nimi alleviivautuu punaisella aaltoviivalla. Eclipse osaa korjata "virheen" tutusta ikonista.

Kuva15.png

Huomaa, kuinka jäsenmuuttujan nimen ympärille tulee laatikko, ja jäsenmuuttuja tulee maalatuksi. Koeta muuttaa jäsenmuuttujan nimeksi vaikkapa nimi. Älä liikuta kohdistinta, aloita vain kirjoittamaan, ...

Kuva16.png

... ja huomaat, kuinka jäsenmuuttujan nimi muuttuu myös esittelyssään. Hienoa ja kätevää!

Kuva17.png

Seuraava virhe: Laskurilla ei ole metodia arvo.

Kuva18.png

Luodaan metodi arvo. Metodin ei tarvitse kuin palauttaa jäsenmuuttujan arvo arvo. Arvokas apu on jälleen Eclipsen virheenkojaajan tarjoama.

Kuva19.png

Luodaan jäsenmuuttuja arvo.

Kuva20.png

Vaan missä vika, kun assertEquals metodin kutsussa on virhemerkintä?

Kuva21.png

Unohdinpa metodia tehdessä tarkastaa sen tyypin, ja oletukseksi tuli String. Eikä Eclipse apuakaan tarjoa, joten metodia editoimaan, mars!

Kuva22.png

Siirrä kohdistin metodin nimen kohdalle, tai metodin kohdalle, ja hiiren valikkonappia klikkaamalla esiin tulee ponnahdusvalikko, josta löytyy varsin ovela alavalikko Source, ja sen sisältä edelleen toiminto Change Method Signature....

Kuva23.png

Hankala dialogi? No ei. Muuta paluuarvon tyypiksi int.

Kuva24.png

Eclipse huomauttaa paluuarvon tyypin ja jäsenmuuttujan tyypin yhteensopimattomuudesta. Ei välitetä siitä vielä.

Kuva25.png

Sitten avautuu dialogi, jossa voidaan tarkistella tulevia muutoksia. Vasen koodinäkymä näyttää alkuperäisen, oikea muutetun koodin. Huomioi välissä oleva viiva ja pienet merkit oikean koodinäkymän oikeassa mariginaalissan. Viiva koodinäkymien välillä kertoo lähde- ja kohdealueen suhteen, merkki oikeassa marginaalissa osoittaa virheen paikan koko tiedostossa. Tämä merkki nopeuttaa paljon liikkumista pitkässä tiedostossa.

Paina OK-nappia.

Kuva27.png

Eclipsen apuri auttaa nyt korjaamaan jäsenmuuttujan tyypin.

Kuva29.png

Ja niin on Laskuri-luokka valmis - tältäosin.

Kuva30.png

Klikkaa valikkonapilla testiluokkan nimeä ja valitse esiintulvasta valikosta Run - JUnit Test.

Kuva31.png

Eclipse suorittaa JUnit-luokan TestLaskuri metodin testLuonti. Tulos saattaa jäädä piiloon...

Kuva32.png

...mutta tabista sen saa esille. Vihreä palkki kertoo kaikkien testien onnistuneen. (Testejä voisi olla useampiakin, ideana on tehdä sanalla test alkavia metodeja.

Kuva33.png

Tee testit laskurin arvon lisäykselle ja nollaukselle. Kuvasta yllä saat vinkkejä tarvittaessa. Huomaa, kuinka Eclipsellä on piilotettu tarvittujen metodien toteutus. Oikealle osoittava kolmio metodirivin vasemmassa marginaalissa virheikonin oikealla puolella osoittaa rivejä piilotetun. Yläpuolella näkyy alas osoittava kolmio, jonka kohdalla kaikki rivit näkyvät. Kokeile piilottaa ja jälleen paljastaa rivejä.

Kuva34.png

Voit myös kokeilla ajaa virheellistä ohjelmaa. Eclipse mahdollistaa tämän, mutta koska kyseessä on ohjelmoijatesti, ei testi mene läpi, ymmärrettävästi.

Kuva35.png

Tässä kuvassa on hauska virhe kohdistimen kohdalla. Mikä?

Ratkaisu löytyy tästä kuvasta.

Kuva38.png

Korjauks(i)en jälkeen ohjelmoijatestin tulos pitäisi olla kuvan mukainen.

Hieno valmis laskuriluokka löytyy tämän linkin takaa.

Kuva40.png

Eclipse on myös varsin hyvin varustettu uudelleentyöstämistyökaluillaan. Yksi näistä on käytännöllinen nyt, nimittäin rajapinnan luokasta irroittava työkalu. Laskureitahan voi olla toteutukseltaan useita. Tee siis Laskuri-luokasta rajapinta Laskija käyttäen työkalua Extract Interface..., joka löytyy ponnahdusvalikon Refactor-valinnan takaa.

Kuva41.png

Eclipse tiedustelee rajapinnan nimeä ja siihen liittyviä metodeja.

Kuva42.png

Seuraavaksi näytetään tulevat muutokset. Klikkaa OK, ...

Kuva43.png

... ja uusi rajapinta on valmis.

Kuva44.png

Varmistetaan vielä, ajetaan ohjelmoijatesti (katso valikosta pikanäppäinkomento). Ei virheitä, hienoa!

Sitten hieman vaikeampi tehtävä. Jokaisen testimetodin alussa luodaan uusi laskuriolio. Miten saisit muutettua testiluokkaa niin, että laskuriolio luotaisiin vain kerran? (Vinkki: TestCase dokumentaatio!)

JUnit-kehys ja dokumentaatiohan löytyi osoitteesta http://www.junit.org/.