Test Driven Test Driven DevelopmentDevelopment
- Romano Adler- http://www.romano-adler.de
Warum sollte man nicht testen?Warum sollte man nicht testen?
„Wir machen viel Prototyping….“„Wir haben keine Zeit um noch Tests zu
schreiben…“„Unsere Anwendung lässt sich nicht
testen…“„Durch manuelles Testen werden alle
Fehler gefunden…“…
„Jaaaa, morgen müssen wir Unit-Tests einführen!“
AgendaAgenda
Unit-Testing mit Visual StudioTest Driven Development-ParadigmenModel View Presenter-PatternMock FrameworksBehavior Verification
Unit-Testing mit Visual Unit-Testing mit Visual StudioStudio
Unit TestingUnit Testing
kleinste Einheit in OO = MethodeTest beschreibt einen Vertragerfordert gute Kapselung
in .NET: NUnit / Visual Studio 2005 / 2008
Method to test
Test
Asserts
Visual Studio Test AttributesVisual Studio Test Attributes
[TestClass()] [TestMethod()][ClassInitialize()] / [ClassCleanup()][AssemblyInitialize()] / [AssemblyCleanup()]
[TestInitialize()] / [TestCleanup()][Priority()][Ignore()][Owner()][Description()][DataSource()][ExpectedException()]
DEMODEMO
Unit-Testing VorteileUnit-Testing Vorteile
Grundlage für RefactoringFehler durch Änderungen können
entdeckt werden (Regression Testing)erleichtert die Integration (Integration
Testing)bringt bessere Architektur z.B. Trennung
zwischen Schnittstelle und Implementierung
Dokumentation
Unit-Testing Best PracticesUnit-Testing Best Practices
Test vor /während dem „Produktiv-Code“ entwickeln
Isolation◦nur Methoden testen ◦keine Abhängigkeiten zwischen Tests
eine Test-Klasse pro Produktiv-Klasse◦eine Methode pro Test-Fall
Mock-Objekte um Interfaces zu testen
Visual Studio TestingVisual Studio Testing
Create Private AccessorsCode CoverageBuild Server
◦per Check-In◦Nightly Build◦Continuous Integration
Visual Studio TestingVisual Studio Testing
Load Tests
Visual Studio TestingVisual Studio Testing
Web Tests
Visual Studio TestingVisual Studio Testing
UI Tests◦TestAutomationFX
◦MVP-Pattern
Team Systems - ÜberblickTeam Systems - Überblick
Version Version ControlControl
Work Item Work Item TrackingTracking
Build Build AutomationAutomation
Team Team CommunicationsCommunications
ReportingReporting
Test Driven Development-Test Driven Development-ParadigmenParadigmen
Der evolutonäre EntwurfDer evolutonäre Entwurf
Entwicklung des Tests (dieser muss fehlschlagen)
Entwicklung der Funktion, sodass der Test (und alle anderen) funktioniert
Refactoring
Bis dem Entwickler keine Tests mehr einfallen
Test Driven DevelopmentTest Driven Development
Testen anhand der Anforderungenerst Test schreibenkurze Iterationen: soviel Code wie nötigerstes Ziel: alle Tests müssen durchlaufenhohe Codeabdeckung
DEMODEMO
Model View PresenterModel View PresenterDesign PatternDesign Pattern
Warum Model View PresenterWarum Model View PresenterDesign Pattern?Design Pattern?
Darstellung Eingabe……
Logik
Logik?
Backend Client
Warum Model View PresenterWarum Model View PresenterDesign Pattern?Design Pattern?
Logik
Backend
Rich-Client
Web-Client
View Presenter Model
Model View PresenterModel View PresenterDesign PatternDesign Pattern
IView
View
Presenter Model
Model View PresenterModel View PresenterDesign PatternDesign Pattern
IView:◦Abstraktion einer View◦definierte Methoden, Properties und Events für
den PresenterView:
◦konkrete View ◦sollte kaum Logik enthalten◦wird nicht getestet
Model View PresenterModel View PresenterDesign PatternDesign Pattern
Presenter◦implementiert client-seitige Logik
Model◦stellt dem Client Daten und Dienste zur
Verfügung
Mock FrameworksMock Frameworks
Mock FrameworksMock Frameworks
Mock Object◦simuliert das Verhalten eines Objekts◦wird benutzt, um das Verhalten eines anderen
Objektes zu simulieren◦benutzt dasselbe Interface, wie das „richtige“
Objekt
Rhino MocksRhino Mocks
Ayende Rahien (Oren Eini) http://www.ayende.com/
MockRepository mockery = new MockRepository ();IMockObject mock = mockery.CreateMock <IMockObject> ();
using ( mockery.Record () ) { SetupResult.For (mock.GetTest()).Return (“Hello");
…
Rhino MocksRhino Mocks
Mock Container: MockRepositoryStrict Mock: CreateMock<T>()None Strict Mock: DynamicMock<T>()Partial Mock: PartialMock<T>()Stub: Stub<T>()Verhalten aufzeichnen: Record() Verhalten definieren: SetupResult.For()Erwartungen definieren: Expect.On ()Verhalten überprüfen: Playback()
DEMODEMO
Behavior VerificationBehavior Verification
Behavior VerificationBehavior Verification
prüft das Verhalten einer Methode
Method to test
Test
Asserts
Method to test
Test
klassisches Unit-Testing Behavior Verification
DEMODEMO
ReferenzenReferenzen
A Unit Testing Walkthrough with Visual Studio Team Test: http://msdn.microsoft.com/en-us/library/ms379625(VS.80).aspx
Visual Studio Team System 2008 Team Foundation Server: http://msdn.microsoft.com/en-us/tfs2008/default.aspx
Model View Presenter - Jean-Paul Boodhoo: http://msdn.microsoft.com/en-us/magazine/cc188690.aspx
dnrTV MVP: http://www.dnrtv.com/default.aspx?showNum=14 ARCast.TV - Presenter First Pattern | ARCast.TV | Channel 9:
http://channel9.msdn.com/shows/ARCast.TV/ARCastTV-Presenter-First-Pattern-Part-1/
The Humble Dialog Box - Michael Feathers: http://www.objectmentor.com/resources/articles/TheHumbleDialogBox.pdf
Rhino Mocks: http://www.ayende.com xUnit-Patterns: http://xunitpatterns.com/
FragenFragen