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ää.
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.
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.
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.
Aloita luomalla uusi projekti nimeltä autolaskuri
. Ensimmäisen
sivun Finnish kelpaa; tarkempia asetuksia ei tarvita.
Kun projekti on valmis, valitse projektin valikko hiiren valikkonäppäimellä (yleensä oikeanpuoleisin), ja valitse valikosta New - JUnit Test Case.
Jos junit.jar
ei ole jo polussa, ehdottaa Eclipse sen
liittämistä polkuun. Hyväksy liitos.
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.
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ä.
Kuvaruudulle aukeaa uuden javaluokan luontidialogi. Asetusten pitäisi olla
muuten kunnossa, mutta muuta paketin nimeksi luokat
; paremmankin
nimen voisi keksiä...
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 ;)
Seuraava virhe on, ettei Laskuri-luokalla ole rakenninta, ...
... ja sekin hoituu Eclipsen automaattisilla korjauksilla (se lamppu-rasti -ikoni).
Huomio laatikot generoidun metodin nimen, sekä ainoan parametrin tyypin ja nimen ympärillä. Metodin nimi on valittuna, voit muokata sitä, joskaan tarvetta ei ole.
Parametrin tyyppiin, seuraavaan laatikkoon,
voi siirtyä painamalla TAB-näppäintä. Muuta parametrin nimeksi
kohde
.
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.
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, ...
... ja huomaat, kuinka jäsenmuuttujan nimi muuttuu myös esittelyssään. Hienoa ja kätevää!
Seuraava virhe: Laskurilla ei ole metodia arvo
.
Luodaan metodi arvo
. Metodin ei tarvitse kuin palauttaa
jäsenmuuttujan arvo
arvo. Arvokas apu on jälleen Eclipsen
virheenkojaajan tarjoama.
Luodaan jäsenmuuttuja arvo
.
Vaan missä vika, kun assertEquals
metodin kutsussa on
virhemerkintä?
Unohdinpa metodia tehdessä tarkastaa sen tyypin, ja oletukseksi tuli
String
. Eikä Eclipse apuakaan tarjoa, joten metodia editoimaan,
mars!
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....
Hankala dialogi? No ei. Muuta paluuarvon tyypiksi int
.
Eclipse huomauttaa paluuarvon tyypin ja jäsenmuuttujan tyypin yhteensopimattomuudesta. Ei välitetä siitä vielä.
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.
Eclipsen apuri auttaa nyt korjaamaan jäsenmuuttujan tyypin.
Ja niin on Laskuri-luokka valmis - tältäosin.
Klikkaa valikkonapilla testiluokkan nimeä ja valitse esiintulvasta valikosta Run - JUnit Test.
Eclipse suorittaa JUnit-luokan TestLaskuri
metodin
testLuonti
. Tulos saattaa jäädä piiloon...
...mutta tabista sen saa esille. Vihreä palkki kertoo kaikkien
testien onnistuneen. (Testejä voisi olla useampiakin, ideana on tehdä
sanalla test
alkavia metodeja.
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ä.
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.
Tässä kuvassa on hauska virhe kohdistimen kohdalla. Mikä?
Ratkaisu löytyy tästä kuvasta.
Korjauks(i)en jälkeen ohjelmoijatestin tulos pitäisi olla kuvan mukainen.
Hieno valmis laskuriluokka löytyy tämän linkin takaa.
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.
Eclipse tiedustelee rajapinnan nimeä ja siihen liittyviä metodeja.
Seuraavaksi näytetään tulevat muutokset. Klikkaa OK, ...
... ja uusi rajapinta on valmis.
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/.