Test Driven Development - Romano Adler- .

34
Test Driven Test Driven Development Development - Romano Adler- http://www.romano-adler.de

Transcript of Test Driven Development - Romano Adler- .

Page 1: Test Driven Development - Romano Adler- .

Test Driven Test Driven DevelopmentDevelopment

- Romano Adler- http://www.romano-adler.de

Page 2: Test Driven Development - Romano Adler- .

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!“

Page 3: Test Driven Development - Romano Adler- .

AgendaAgenda

Unit-Testing mit Visual StudioTest Driven Development-ParadigmenModel View Presenter-PatternMock FrameworksBehavior Verification

Page 4: Test Driven Development - Romano Adler- .

Unit-Testing mit Visual Unit-Testing mit Visual StudioStudio

Page 5: Test Driven Development - Romano Adler- .

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

Page 6: Test Driven Development - Romano Adler- .

Visual Studio Test AttributesVisual Studio Test Attributes

[TestClass()] [TestMethod()][ClassInitialize()] / [ClassCleanup()][AssemblyInitialize()] / [AssemblyCleanup()]

[TestInitialize()] / [TestCleanup()][Priority()][Ignore()][Owner()][Description()][DataSource()][ExpectedException()]

Page 7: Test Driven Development - Romano Adler- .

DEMODEMO

Page 8: Test Driven Development - Romano Adler- .

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

Page 9: Test Driven Development - Romano Adler- .

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

Page 10: Test Driven Development - Romano Adler- .

Visual Studio TestingVisual Studio Testing

Create Private AccessorsCode CoverageBuild Server

◦per Check-In◦Nightly Build◦Continuous Integration

Page 11: Test Driven Development - Romano Adler- .

Visual Studio TestingVisual Studio Testing

Load Tests

Page 12: Test Driven Development - Romano Adler- .

Visual Studio TestingVisual Studio Testing

Web Tests

Page 13: Test Driven Development - Romano Adler- .

Visual Studio TestingVisual Studio Testing

UI Tests◦TestAutomationFX

◦MVP-Pattern

Page 14: Test Driven Development - Romano Adler- .

Team Systems - ÜberblickTeam Systems - Überblick

Version Version ControlControl

Work Item Work Item TrackingTracking

Build Build AutomationAutomation

Team Team CommunicationsCommunications

ReportingReporting

Page 15: Test Driven Development - Romano Adler- .

Test Driven Development-Test Driven Development-ParadigmenParadigmen

Page 16: Test Driven Development - Romano Adler- .

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

Page 17: Test Driven Development - Romano Adler- .

Test Driven DevelopmentTest Driven Development

Testen anhand der Anforderungenerst Test schreibenkurze Iterationen: soviel Code wie nötigerstes Ziel: alle Tests müssen durchlaufenhohe Codeabdeckung

Page 18: Test Driven Development - Romano Adler- .

DEMODEMO

Page 19: Test Driven Development - Romano Adler- .

Model View PresenterModel View PresenterDesign PatternDesign Pattern

Page 20: Test Driven Development - Romano Adler- .

Warum Model View PresenterWarum Model View PresenterDesign Pattern?Design Pattern?

Darstellung Eingabe……

Logik

Logik?

Backend Client

Page 21: Test Driven Development - Romano Adler- .

Warum Model View PresenterWarum Model View PresenterDesign Pattern?Design Pattern?

Logik

Backend

Rich-Client

Web-Client

View Presenter Model

Page 22: Test Driven Development - Romano Adler- .

Model View PresenterModel View PresenterDesign PatternDesign Pattern

IView

View

Presenter Model

Page 23: Test Driven Development - Romano Adler- .

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

Page 24: Test Driven Development - Romano Adler- .

Model View PresenterModel View PresenterDesign PatternDesign Pattern

Presenter◦implementiert client-seitige Logik

Model◦stellt dem Client Daten und Dienste zur

Verfügung

Page 25: Test Driven Development - Romano Adler- .

Mock FrameworksMock Frameworks

Page 26: Test Driven Development - Romano Adler- .

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

Page 27: Test Driven Development - Romano Adler- .

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");

Page 28: Test Driven Development - Romano Adler- .

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()

Page 29: Test Driven Development - Romano Adler- .

DEMODEMO

Page 30: Test Driven Development - Romano Adler- .

Behavior VerificationBehavior Verification

Page 31: Test Driven Development - Romano Adler- .

Behavior VerificationBehavior Verification

prüft das Verhalten einer Methode

Method to test

Test

Asserts

Method to test

Test

klassisches Unit-Testing Behavior Verification

Page 32: Test Driven Development - Romano Adler- .

DEMODEMO

Page 33: Test Driven Development - Romano Adler- .

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/

Page 34: Test Driven Development - Romano Adler- .

FragenFragen