Test Driven utveckling (del 1)
juli 2007
ClosedAtt utveckla test drivet borde vara en självklarhet, trots detta är det många som skriver koden från andra hållet. Att först skriva vad som behöveher göras och där efter skriva så det görs måste vara vettigare än tvärt om. Jag tänkte här göra ett liten exempel på hut det fungerar och bygga ut det. med kommentarer och annat runt hur jag kodar. Grunderna i Test Driven Utveckling (TDD i fortsättningen från Test Driven Development) är att man jobbar i tre faser, Röd, Grön, Refactor. Jag kommer att ha lite exempel i java, det var ett tag sedan jag jobbade full fart i java så det kanske ser knepigt ut i bland.
Det första stegat är att skapa en test för det vi vill göra. Jag har bestämt mig att börja titta på en program frö glos förhör. Jag hoppar över mycket av det som behövs antar att det fungerar och tittar på en klass som hanterat en glosa. Jag kommer just nu på tre saker en sådan klass behöver kunna.
- Visa glosan i modersmålet.
- Visa glosan i det främmande språket.
- Jämföra det inskrivna med båda orden.
Det fösta steget är att skapa klasserna, jag tänger jobba med eclipse som utvecklings miljö idag, det ger mig lite skillnader i hut jag jobbar för att få effektiv hjälp.
Första steget är att skapa den klassen som skall hålla glosan. ”New > Class” kalla den för Glossary, Eclipse skapar nu en källkod fil, för denna klass:
package se.arnholm.tdd;
public class Glossary {
}
Sedan skapar vi en unit test för denna klass höger klicka på filen eller classen i ”Package Explorer” och ”New > JUnit Test Case”. Vi får ny en ganska tom unittestfil. Jag brukar tycke det är brav att skriva in vilkat krav jag tycker jag på klassen här.
/**
* Tests for Glossary.
*
* - Should be able to get string in native language
* - Should be able to get string in foregin language
* - Should be possible to compare both sting with input
*
*/
package se.arnholm.tdd;
import junit.framework.TestCase;
public class GlossaryTest extends TestCase {
}
Nu är det dags att böjra skapa tester, jag skriver in en test testNative() som jag tror kan ta det första behovet.
public void testNative() {
assertEquals("God dag", godDag.getNative());
}
Detta kompiklerar inte als men nu skal vi slita på eclipse styrkor, klicka på fel symbolen, Välj ”Create Local Variable” och skriv om typen ”Object” till ”Glossary”. Vi får ett nytt fel. Klicke igen och välj ”Create method ‘getNative()’ in type ‘Glossary’”. ”Public String” ser ut som en bra start. Ett fel kvar i GlossaryTest.java, godDay variablen är inte deklarerad. Lägg till ” = new Glossary()” i deklarationen. spara och all skall kompiera, vår test funktion är nu.
public void testNative() {
Glossary godDag = new Glossary();
assertEquals("God dag", godDag.getNative());
}
Dags att testa. Höger klicka på filen, ”Run as > JUnit test”. Det blev rött, dags att fixa felet. klicka på felet i listan och editorn kommer att visa var felet uppstod i test fallet. Ser ut som om getNative() returnerade <null> i stället för ”God Dag”. Och fixa til det öppna getNative() funktionen (tryck F3), jepp det står return null det är ju fel. Ta bort todo kommentaren och skriv in det vi vill ha, med andra ord, return ”God dag”; Kör testen igen det bör bli grönt, bra det fungerar. Dags för lite refactoring. Vi upprepar data från UnitTest faller i koden, inte helt prefekt. Genom i ett par olika steg bryta ut ”God dag” strängen in Glossare mot något som kommer från construktorn får vi följande enkla kod.
public class Glossary {
String nativeString;
public Glossary(String nativeName) {
nativeString = nativeName;
}
public String getNative() {
return nativeString;
}
}
Och test faller ät nu:
public class GlossaryTest extends TestCase {
public void testNative() {
final String nativeString = "God dag";
Glossary godDag = new Glossary(nativeString);
assertEquals(nativeString, godDag.getNative());
}
}
Kört testen igen och se hur det är grönt. Vi har nu skapat ett första test fall.
Popularity: 4% [?]
Filed under: Programering
