Test Driven Development - Romano Adler- .

Post on 05-Apr-2015

110 views 1 download

Transcript of Test Driven Development - Romano Adler- .

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