582334 TDD-ohjelmointimenetelmä ja koodin suunnittelu (5 op), syksy 2009
582334 TDD programming technique and designing code (5 cr), autumn 2009

Kurssiesittely Luennot Harjoitukset

Ympäristön asennus

Apache Maven

Imuroi Maven ja pura se haluamaasi asennuskansioon. Laitoksen koneilla esim. ~/opt/maven

Lisää Mavenin sijainti PATH:iin noudattaen Mavenin README-tiedoston ohjeita. Laitoksen koneilla lisää kotihakemistosi .bashrc-tiedostoon esim. rivi export PATH="$HOME/opt/maven/bin:$PATH" jonka lisäyksen jälkeen pitää kirjautua uudestaan sisään tai ainakin käynnistää terminaali uudestaan. Sen lisäksi .profile-tiedostossa pitää olla rivi . ~/.bashrc

Varmista myös, että JAVA_HOME-ympäristömuuttuja osoittaa koneelle asennettuun JDK:hon. Laitoksen koneilla näin näkyy jo olevan valmiiksi.

Tarkista, että Mavenin asennus toimii komennolla mvn --version

JUnit

Kun Maven on asennettu, niin voit ajaa Maven-projektin sisältämät JUnit-testit ajamalla komennon mvn test projektin juurikansiossa. Mavenin käytäntöjen mukaisesti tuotantokoodit ovat kansiossa /src/main/java testikoodit kansiossa /src/test/java.

Tetris-harjoitustyön tapauksessa projektissa on aluksi yksi testi, joka ei mene läpi. Tällöin mvn test antaa ilmoituksen:

Results :

Failed tests: 
  test_Is_empty(tetris.FallingBlocksTest$A_new_board)

Tests run: 1, Failures: 1, Errors: 0, Skipped: 0

[INFO] ------------------------------------------------------------------------
[ERROR] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] There are test failures.

Kun korjaat koodin (muuta tiedostossa Board.java rivi s += "?"; muotoon s += ".";), niin sen jälkeen mvn test ilmoittaa kaikkien testien menevän läpi:

Results :

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------

Tämän kurssin harjoituksissa annetut Maven-projektit on konfiguroitu siten, että saat paketoitua niiden lähdekoodit helposti ZIP-tiedostoksi komennolla mvn clean package, minkä jälkeen projektin /target kansioon ilmestyy -src.zip -päätteinen tiedosto.

JUnit-esimerkki

Alla on esimerkki JUnit 3 -testistä. Se perii luokan junit.framework.TestCase ja sen luokkanimi päättyy sanaan "Test", mistä Maven tietää ajaa siinä olevat testit.

import junit.framework.*;

public class SampleTest extends TestCase {

    public void testThisShouldPass() {
        int expected = 1;
        int actual = 1;
        assertEquals(expected, actual);
    }

    public void testThisShouldFail() {
        int expected = 1;
        int actual = 2;
        assertEquals(expected, actual);
    }
}

Kun testit ajetaan, niin JUnit luo ilmentymän SampleTest:stä ja kutsuu ensimmäistä metodia, jonka nimi alkaa sanalla "test". Jos metodi ei heitä poikkeusta, niin testi menee läpi. Sen jälkeen JUnit jättää aiemmin luodun SampleTest-ilmentymän roskienkerääjälle, luo uuden ilmentymän SampleTest:stä ja kutsuu sen seuraavaa metodia, joka alkaa sanalla "test". Näin kutsutaan luokan kaikkia testimetodeja. Jos luokassa on määritetty setUp() tai tearDown() metodit (ks. TestCase-kantaluokka), niin niitä kutsutaan ennen ja jälkeen testimetodin.

TestCase-kantaluokassa on useita assert-metodeja, joilla voi esittää väittämiä testattavan koodin tilasta. Esimerksiksi assertEquals-metodi heittää poikkeuksen, jos sille annetut kaksi arvoa eivät ole samoja. Katso TestCase:n dokumentaatiosta lisätietoja.

Lisää ohjeita saa JUnitin kotisivuita.

Tämän kurssin harjoitustehtävissä annetut esimerkkikoodit käyttävät enimmäkseen JUnit 3 -tyylisiä testejä. JUnit 4:ssä testiluokan ei tarvitse periä TestCase:a, eikä metodien tarvitse alkaa sanalla "test", vaan testimetodit merkitään org.junit.Test -annotaatiolla. Jos haluat, niin voit kirjoittaa testisi JUnit 4 -tyylillä - se on melko pitkälti mielipidekysymys. JUnit 4 on täysin taaksepäinyhteensopiva.

Lisäksi tämän kurssin Tetris-harjoitustyössä testit on on järjestetty hieman epätyypillisesti staattisiksi sisäluokiksi, koska JUnit on liian rajoittunut eikä tue testien hierarkista organisointia specification-tyyliin kovin hyvin (toisin kuin esim. RSpec, Specs ja JDave). Tämän kurssin jälkeen voitte valita mieluisenne testiframeworkin, mutta tämän kurssin aikana käytetään JUnit:ia, koska se on erittäin yksinkertainen ja de facto -asemassaan yleisesti tuettu.

IntelliJ IDEA

Imuroi IntelliJ IDEA ja asenna se.

Laitoksena koneilla pitää konfiguroida ympäristömuuttuja JDK_HOME lisäämällä .bashrc tiedostoon esim. export JDK_HOME="$JAVA_HOME"

Avaa Maven-projektin pom.xml tiedosto IDEAssa "File | Open Project".

Konfiguroi JDK kohdasta "File | Project Structure | Platform Settings | JDKs" ja tarkista että se on valittuna sivulla "File | Project Structure | Project Settings | Project".

Testit saa ajettua IDEAssa konfiguroimalla "Run | Edit Configurations | + | JUnit" ja ajamalla kaikki JUnit-testit projektissa komennolla "Run | Run".

NetBeans

Imuroi NetBeans IDE, Java SE Bundle ja asenna se.

Avaa Maven-projekti NetBeansissa "File | Open Project".

Testit saat ajettua valikosta "Run | Test Project".

Eclipse

Imuroi Eclipse IDE for Java Developers ja asenna se.

Eclipse ei suoraan tue Mavenia, mutta Maven tukee Eclipseä. Jos ajat komennon mvn eclipse:eclipse jonkin Maven-projektin juuressa, niin Maven generoi Eclipse-projektitiedostot sille projektille.

Lisäksi Eclipseen pitää lisätä ympäristömuuttuja M2_REPO osoittamaan kansioon ~/.m2/repository asetusikkunassa "Window | Preferences | Java | Build Path | Classpath Variables".

Testit saa ajettua Ecplipsessä konfiguroimalla "Run | Run Configurations | JUnit" ajamaan kaikki JUnit 4 -testit projektissa.


Viimeksi muokattu 01.12.2010 21:04 Copyright © 2009 Esko Luontola