350 likes | 504 Views
Test Driven Development. - Romano Adler- http://www.romano-adler.de. „Jaaaa, morgen müssen wir Unit-Tests einführen!“. „ Wir machen viel Prototyping …. “ „ Wir haben keine Zeit um noch Tests zu schreiben… “ „ Unsere Anwendung lässt sich nicht testen… “
E N D
Test Driven Development - Romano Adler- http://www.romano-adler.de
„Jaaaa, morgen müssen wir Unit-Tests einführen!“ • „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…“ • … Warum sollte man nicht testen?
Unit-Testing mit Visual Studio • Test Driven Development-Paradigmen • Model View Presenter-Pattern • Mock Frameworks • Behavior Verification Agenda
kleinste Einheit in OO = Methode • Test beschreibt einen Vertrag • erfordert gute Kapselung • in .NET: NUnit / Visual Studio 2005 / 2008 Test Methodtotest Asserts Unit Testing
[TestClass()] • [TestMethod()] • [ClassInitialize()] / [ClassCleanup()] • [AssemblyInitialize()] / [AssemblyCleanup()] • [TestInitialize()] / [TestCleanup()] • [Priority()] • [Ignore()] • [Owner()] • [Description()] • [DataSource()] • [ExpectedException()] Visual Studio Test Attributes
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 Vorteile
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 Unit-Testing Best Practices
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 Visual Studio Testing
Work Item Tracking Version Control Reporting Team Communications Build Automation Team Systems - Überblick
Bis dem Entwickler keine Tests mehr einfallen Entwicklung des Tests (dieser muss fehlschlagen) Entwicklung der Funktion, sodass der Test (und alle anderen) funktioniert Refactoring Der evolutonäre Entwurf
Testen anhand der Anforderungen • erst Test schreiben • kurze Iterationen: soviel Code wie nötig • erstes Ziel: alle Tests müssen durchlaufen • hohe Codeabdeckung Test Driven Development
Darstellung • Eingabe • …… Backend Client • Logik • Logik? Warum Model View PresenterDesign Pattern?
View Presenter Model Rich-Client Logik Backend Web-Client Warum Model View PresenterDesign Pattern?
IView Presenter Model View Model View PresenterDesign 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 PresenterDesign Pattern
Presenter • implementiert client-seitige Logik • Model • stellt dem Client Daten und Dienste zur Verfügung Model View PresenterDesign Pattern
Mock Object • simuliert das Verhalten eines Objekts • wird benutzt, um das Verhalten eines anderen Objektes zu simulieren • benutzt dasselbe Interface, wie das „richtige“ Objekt Mock Frameworks
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 Mocks
Mock Container: MockRepository • Strict Mock: CreateMock<T>() • None Strict Mock: DynamicMock<T>() • Partial Mock: PartialMock<T>() • Stub: Stub<T>() • Verhaltenaufzeichnen: Record() • Verhaltendefinieren: SetupResult.For() • Erwartungendefinieren: Expect.On () • Verhaltenüberprüfen: Playback() Rhino Mocks
prüft das Verhalten einer Methode Test Test Methodtotest Methodtotest Asserts klassisches Unit-Testing Behavior Verification BehaviorVerification
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/ Referenzen