Test Driven Development - Romano Adler-
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!
Agenda Unit-Testing mit Visual Studio Test Driven Development-Paradigmen Model View Presenter-Pattern Mock Frameworks Behavior Verification
Unit-Testing mit Visual Studio
Unit Testing kleinste Einheit in OO = Methode Test beschreibt einen Vertrag erfordert gute Kapselung in.NET: NUnit / Visual Studio 2005 / 2008 Method to test Test Asserts
Visual Studio Test Attributes [TestClass()] [TestMethod()] [ClassInitialize()] / [ClassCleanup()] [AssemblyInitialize()] / [AssemblyCleanup()] [TestInitialize()] / [TestCleanup()] [Priority()] [Ignore()] [Owner()] [Description()] [DataSource()] [ExpectedException()]
DEMO
Unit-Testing Vorteile Grundlage für Refactoring Fehler 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 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 Testing Create Private Accessors Code Coverage Build Server per Check-In Nightly Build Continuous Integration
Visual Studio Testing Load Tests
Visual Studio Testing Web Tests
Visual Studio Testing UI Tests TestAutomationFX MVP-Pattern
Team Systems - Überblick Version Control Work Item Tracking Build Automation Team Communications Reporting
Test Driven Development- Paradigmen
Der 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 Development Testen anhand der Anforderungen erst Test schreiben kurze Iterationen: soviel Code wie nötig erstes Ziel: alle Tests müssen durchlaufen hohe Codeabdeckung
DEMO
Model View Presenter Design Pattern
Warum Model View Presenter Design Pattern? Darstellung Eingabe …… Logik Logik? Backend Client
Warum Model View Presenter Design Pattern? Logik Backend Rich-Client Web-Client ViewPresenterModel
Model View Presenter Design Pattern IView View PresenterModel
Model View Presenter Design Pattern IView: Abstraktion einer View definierte Methoden, Properties und Events für den Presenter View: konkrete View sollte kaum Logik enthalten wird nicht getestet
Model View Presenter Design Pattern Presenter implementiert client-seitige Logik Model stellt dem Client Daten und Dienste zur Verfügung
Mock 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 Mocks Ayende Rahien (Oren Eini) MockRepository mockery = new MockRepository (); IMockObject mock = mockery.CreateMock (); using ( mockery.Record () ) { SetupResult.For (mock.GetTest()).Return (Hello"); …
Rhino Mocks Mock Container: MockRepository Strict Mock: CreateMock () None Strict Mock: DynamicMock () Partial Mock: PartialMock () Stub: Stub () Verhalten aufzeichnen: Record() Verhalten definieren: SetupResult.For() Erwartungen definieren: Expect.On () Verhalten überprüfen: Playback()
DEMO
Behavior Verification
prüft das Verhalten einer Methode Method to test Test Asserts Method to test Test klassisches Unit-Testing Behavior Verification
DEMO
Referenzen A Unit Testing Walkthrough with Visual Studio Team Test: Visual Studio Team System 2008 Team Foundation Server: Model View Presenter - Jean-Paul Boodhoo: dnrTV MVP: ARCast.TV - Presenter First Pattern | ARCast.TV | Channel 9: First-Pattern-Part-1/ First-Pattern-Part-1/ The Humble Dialog Box - Michael Feathers: x.pdf x.pdf Rhino Mocks: xUnit-Patterns:
Fragen