Dies ist eine alte Version des Dokuments!


# Unit testing # ## Was ist ein Unit? ## ### Einheit: Übereinkunft im Team ### ### Unit Testing deutsch: Modultest, Komponententest → keine Aussage über die Größe eines Units ### ### Wikipeda unit testing: A unit is the smallest testable part of an application ### #### Nützlich? #### ## Abgrenzungen ## ### Akzeptanztests - Erfüllt das Programm die Anforderungen ### #### Funktionale Anforderungen #### #### Nichtfunktionale Anforderungen #### ##### ⇒ Concordion ##### ### Integrationstest - Zusammenspiel von Komponenten ### #### Teile des Systems #### #### Ganzes System #### ### Unit Test ### #### Testbare Teile in isolation #### #### Typisch in OO: Klassentest #### ### Auch Integrationstests und Akzeptanztests können mit xUnit geschrieben sein! ### ## Was finden wir oft in existierender Software vor? ## ### Ein paar mit xUnit geschriebene Tests ### ### Tests prüfen eine Hand voll Probleme, oftmals mehrere Komponenten im Zusammenspiel. ### ### Manchmal unter Einbeziehung der Umwelt ### ### –> Das sind keine Unit-Tests ### ## Was leistet eigentlich Unit-Testing? ## ### Einfaches Beispiel: Code Kata Anagramm: ![www.codingdojo.org—wiki.plhttp:www.codingdojo.org/cgi-bin/wiki.pl?KataBankOCR]() ### ### Wir machen das als TDD (Checksum) ### ### Regeln für einen Unit-Test live erarbeiten (Protokoll) ### #### What is the object under Test? #### #### Naming (Assumption On Condition) #### #### Keine Reihenfolge #### #### Common Setup - nur um die Lesbarkeit zu erhöhen #### #### Mocking (Don't use 3rd party) #### ##### Mocks / Stubs ![martinfowler.com—mocksArentStubs.htmlhttp:martinfowler.com/articles/mocksArentStubs.html]() ##### ##### –> Hauptgrund für IoC, Programming against Interfaces, etc. … ##### ##### ![mockito.googlecode.com—Mockito.htmlhttp:mockito.googlecode.com/svn/branches/1.5/javadoc/org/mockito/Mockito.html]() ##### #### State vs. Behaviour #### ##### lawnsprinkler.enable() ##### ###### expect valve.open() ###### ###### verify(grass.isWet()) ###### ## Beobachtungen: ## ### Programm und Test ist fertig, können wir Bugs finden? ### ### Was soll das ganze dann? ### ## Aufgaben von Unit-Tests ## ### Test von Entwicklerannahmen ### #### Die Tests stellen sicher, dass die Klassen das Interface erfüllen, das wir als Entwickler festegelegt haben. #### ### Umfangeiche Interfaces machen mehr Mühe beim Testen: Interfaces werden kleiner ### ### Hauptnutzen: Ich kann die Implementaton ändern und merke ob die neue Implementation noch das alte Interface erfüllt (Regression) ### ### Aber: Unit-Tests sind kein Ersatz für weiteres Testing (siehe Abgrenzung) ### ### Aber: Unit-Tests finden keine neuen Bugs ### #### Nach der Entwicklung ist der Test OK #### ## Non-Functional: ## ### Tests müssen ohne Aufwand durchzuführen sein ### ### Test müssen schnell sein ### ## Ergebnis: Höheres Vertrauen des Entwicklers in den Code ## ## Ergebnis: Verhindert „ich traue mich nicht das zu ändern“ ##