NUnit er et simpelt, men særdeles effektivt testværktøj. Er du .NET
udvikler, bør du kende til dette værktøj.
Siden softwareudviklingsmetoden eXtreme Programming (XP) kom frem i
1999, har den fået mere og mere omtalte, og i det seneste års tid har også
de danske softwareudviklere for alvor taget det til sig. I dag
arbejder mange softwareudviklingsteams med alle eller mange af elementerne fra
XP. Flere af de 12 dicipliner omhandler tests, og test-først programmering er en
grundsten i XP. For at kunne anvende test-først programmering og automatisering
af tests kræves et værktøj.
NUnit er dette værktøj - et forholdsvis simpelt
testværktøj. NUnit er en direkte "udløber" af JUnit (til java), det oprindelige
unit-test værktøj. JUnit var oprindeligt lavet af Kent Beck og Erich Gamma
henholdsvis XP's "fader" og en af de fire forfattere bag design patterns. NUnit
er en portering til .NET og i
den nyeste version er den i høj grad tilpasset .NET, bl.a. udnyttes attributter intensivt.
Den superkorte user guide
For at lave en automatisk test
med NUnit skal du oprette en testklasse, der indeholder en eller flere testmetoder.
Her er et eksempel på en testmetode, det er fra et reelt
projekt - Captators Calculus komponent. Calculus er en slags lommeregner/udtryksevaluator, hvor man
kan angive et matematisk udtryk (som en streng). For at få beregnet udtrykket er
der to skridt: Først valideres udtrykket - hvis det kan valideres (dvs. der
ingen syntaksfejl eller ukendte funktioner er) - og derefter kan man foretage beregningen. For
at afgøre om Calculus fungerer på et meget simpelt udtryk skal man således checke,
om der returneres true i det første skridt (altså at syntaksen er ok) og
i det andet skridt skal man undersøge, om udregningen giver den rigtige værdi:
<TestFixture()> Public Class CalculatorDoubleAndIntegerResultTester
Private valError As New Captator.Eifos.Calculus.Calculator.ValidationError()
<Test()> Public Sub SimpleExpression()
Dim evaluator As New Captator.Eifos.Calculus.Calculator(Calculator.TypeDef.AsDouble)
Assertion.Assert(evaluator.ValidateExpression("100 + 2", valError))
Assertion.AssertEquals(102, evaluator.CalculateIntegerResult(valError))
End Sub
End Class
Eksempel 1 - Et NUnit eksempel, en testklasse med en testmetode
NUnit arbejder ud fra en assembly. Når assemblyen loades, scanner
NUnit assemblyen igennem for klasser, der er erklæret med attributten
<TestFixture()>. Når den har fundet en testfixture, så scannes
denne klasse igennem for metoder med attributten <Test()> - hver af disse
metoder betragtes som en selvstændig test.
Tests i NUnit har for det meste et udseende som vist i eksempel 1. Først
oprettes det/de objekter, hvorpå testen skal foretages. Herefter kaldes de
metoder, der skal testes, og slutteligt checkes, om det forventede resultat
stemmer overens med det den testede funktion returnerer.
Start NUnit-GUI applikationen og udpeg den
assembly, hvori testene ligger. Herefter scanner NUnit assemblien og bygger et
tree-view op udfra de klasser, der er <TestFixture()>'s og deres testmetoder. Træet
ordnes efter namespaces på de enkelte klasser. I eksemplet herunder er testen
SimpleExpression i klassen
CalculatorDoubleAndIntegerResultTester (der ligger i namespacet
Captator.Eifos.Calculus.Test). I
eksemplet er metoden SimpleExpression testet. Som det ses af den grønne
farve, gik testen godt.
Test-først programmering
Når du har lært at lave
NUnit test, kan du opnå fordelen ved at benytte NUnit - nemlig de
automatiske teste. Ved at automatisere tests kan de afvikles igen og igen og igen. Derved kan du,
hver gang du har lavet en ny stump kode, køre alle tests og forsikre dig om, at du
ikke har indført nogle følgefejl. Det er virkelig en utrolig dejlig fornemmelse!
Test-først programmering handler om at benytte tests meget aktivt, når
der kodes. Som navnet antyder så skrives testen først - og hermed menes - FØR
selve den kode, der skal testes! Test-først programmering er en diciplin, som kan være
svær at forholde sig til, medmindre man har prøvet det på "egen
krop". Captator er i gang med at lave en tutorial, der step for step
gennemgår et eksempel, så "stay tuned".
Hvordan kommer jeg videre
Find henvisninger til download af NUnit under Diverse Downloads på vores essentielle .NET
download side (en side med alle de .NET downloads vi er stødt på og har
ment var relevante for de fleste .NET udviklere).
Hvis du vil har kommentarer til denne artikel
eller vil vide mere om brugen af NUnit, best practices mv. så kontakt
Captator: juel@captator.dk.