Stefan Lieser . Wer erstellt regelmäßig Unit Tests?

66
Stefan Lieser http://lieser- online.de estdriven evelopment - DD - Style

Transcript of Stefan Lieser . Wer erstellt regelmäßig Unit Tests?

Page 1: Stefan Lieser . Wer erstellt regelmäßig Unit Tests?

Stefan Lieserhttp://lieser-online.de

TestdrivenDevelopment -BDD - Style

Page 2: Stefan Lieser . Wer erstellt regelmäßig Unit Tests?

Wer erstelltregelmäßig Unit

Tests?

Page 3: Stefan Lieser . Wer erstellt regelmäßig Unit Tests?

Wer kennt seineTestabdeckung?

Page 4: Stefan Lieser . Wer erstellt regelmäßig Unit Tests?

Wer erstellt Testsum Bugs zu

reproduzieren?

Page 5: Stefan Lieser . Wer erstellt regelmäßig Unit Tests?

Wer erstellt Testsvor der

Implementierung?

Page 6: Stefan Lieser . Wer erstellt regelmäßig Unit Tests?

TDD

Page 7: Stefan Lieser . Wer erstellt regelmäßig Unit Tests?

TestDrivenDevelopment

Page 8: Stefan Lieser . Wer erstellt regelmäßig Unit Tests?

TestFirst

Page 9: Stefan Lieser . Wer erstellt regelmäßig Unit Tests?

Revolution!

Page 10: Stefan Lieser . Wer erstellt regelmäßig Unit Tests?
Page 11: Stefan Lieser . Wer erstellt regelmäßig Unit Tests?
Page 12: Stefan Lieser . Wer erstellt regelmäßig Unit Tests?

Zeit

Test Code

Page 13: Stefan Lieser . Wer erstellt regelmäßig Unit Tests?

Test= hinterher

Page 14: Stefan Lieser . Wer erstellt regelmäßig Unit Tests?

Spracheformtdas Denken

Page 15: Stefan Lieser . Wer erstellt regelmäßig Unit Tests?

Sapir-WhorfHypothese

Page 16: Stefan Lieser . Wer erstellt regelmäßig Unit Tests?

?

Page 17: Stefan Lieser . Wer erstellt regelmäßig Unit Tests?

BDD

Page 18: Stefan Lieser . Wer erstellt regelmäßig Unit Tests?

BehaviorDrivenDevelopment

Page 19: Stefan Lieser . Wer erstellt regelmäßig Unit Tests?

Evolution

Page 20: Stefan Lieser . Wer erstellt regelmäßig Unit Tests?

SpecificationFirst

Page 21: Stefan Lieser . Wer erstellt regelmäßig Unit Tests?
Page 22: Stefan Lieser . Wer erstellt regelmäßig Unit Tests?

TestSpecification

Page 23: Stefan Lieser . Wer erstellt regelmäßig Unit Tests?

Testen?

Page 24: Stefan Lieser . Wer erstellt regelmäßig Unit Tests?

Das machen die Tester!

Page 25: Stefan Lieser . Wer erstellt regelmäßig Unit Tests?

Das kostet zu viel Zeit!

Page 26: Stefan Lieser . Wer erstellt regelmäßig Unit Tests?

Mein Code ist fehlerfrei!

Page 27: Stefan Lieser . Wer erstellt regelmäßig Unit Tests?

Dafür sind wir da!

Page 28: Stefan Lieser . Wer erstellt regelmäßig Unit Tests?

Sollen wir arbeitslos werden?

Page 29: Stefan Lieser . Wer erstellt regelmäßig Unit Tests?

Ihr habt keine Ahnung!

Page 30: Stefan Lieser . Wer erstellt regelmäßig Unit Tests?
Page 31: Stefan Lieser . Wer erstellt regelmäßig Unit Tests?

TDD Entwicklung

Page 32: Stefan Lieser . Wer erstellt regelmäßig Unit Tests?

Tests für vorhandenen Code

Page 33: Stefan Lieser . Wer erstellt regelmäßig Unit Tests?

Vertrauen

Page 34: Stefan Lieser . Wer erstellt regelmäßig Unit Tests?

Reduktion

Page 35: Stefan Lieser . Wer erstellt regelmäßig Unit Tests?

Dokumentation

Page 36: Stefan Lieser . Wer erstellt regelmäßig Unit Tests?

Offenbarung

Page 37: Stefan Lieser . Wer erstellt regelmäßig Unit Tests?

Verhalten

Page 38: Stefan Lieser . Wer erstellt regelmäßig Unit Tests?

Mockups

Page 39: Stefan Lieser . Wer erstellt regelmäßig Unit Tests?
Page 40: Stefan Lieser . Wer erstellt regelmäßig Unit Tests?

UserStories

Page 41: Stefan Lieser . Wer erstellt regelmäßig Unit Tests?
Page 42: Stefan Lieser . Wer erstellt regelmäßig Unit Tests?

Als Shopbenutzer

möchte ich Bücherin meinen Warenkorb legen

um meine Bestellung besserüberblicken zu können.

Page 43: Stefan Lieser . Wer erstellt regelmäßig Unit Tests?

WhoWhatWhy

Page 44: Stefan Lieser . Wer erstellt regelmäßig Unit Tests?

RoleGole

Motivation

Page 45: Stefan Lieser . Wer erstellt regelmäßig Unit Tests?

Technologie

Page 46: Stefan Lieser . Wer erstellt regelmäßig Unit Tests?

Business Domain

Page 47: Stefan Lieser . Wer erstellt regelmäßig Unit Tests?

Sprache derDomain

verwenden

Page 48: Stefan Lieser . Wer erstellt regelmäßig Unit Tests?

Business und Technikverwenden die selbe

Sprache!

It‘s all behavior

Page 49: Stefan Lieser . Wer erstellt regelmäßig Unit Tests?

Gegeben ein MessageBoardController

Wenn die Index Action aufgerufen wird und wenn 10 Nachrichten vorhanden sind

Dann sollen die 5 neusten Nachrichten aus dem Repository ermittelt werden

Page 50: Stefan Lieser . Wer erstellt regelmäßig Unit Tests?

Gegeben ein MessageBoardController

Wenn die Index Action aufgerufen wird und wenn 10 Nachrichten vorhanden sind

Dann sollen die 5 neusten Nachrichten aus dem Repository ermittelt werden

Page 51: Stefan Lieser . Wer erstellt regelmäßig Unit Tests?

Gegeben ein Nachrichten SystemWenn es dargestellt wirdDann zeigt es die 5 neusten Nachrichten

Page 52: Stefan Lieser . Wer erstellt regelmäßig Unit Tests?

Als Benutzer desNachrichten Systems

möchte ich die 5 neustenNachrichten sehen

damit die Nachrichtenauf meinen Bildschirm passen

Page 53: Stefan Lieser . Wer erstellt regelmäßig Unit Tests?

BDD =AutomatisierteAkzeptanztests

Page 54: Stefan Lieser . Wer erstellt regelmäßig Unit Tests?

Unit Tests:Der Code ist richtig.

Akzeptanztests:Es ist der richtige Code.

Page 55: Stefan Lieser . Wer erstellt regelmäßig Unit Tests?

Syntax

Page 56: Stefan Lieser . Wer erstellt regelmäßig Unit Tests?

Assert.AreEqual(5, x);

Assert.That(x, Is.EqualTo(5));

x.ShouldBeEqualTo(5);

x.should_be_equal_to(5);

Page 57: Stefan Lieser . Wer erstellt regelmäßig Unit Tests?

Arrange/Act/Assert

Page 58: Stefan Lieser . Wer erstellt regelmäßig Unit Tests?

Setup/Exercise/Verify

Page 59: Stefan Lieser . Wer erstellt regelmäßig Unit Tests?

[TestFixture]public class ClassicalTDD{    private IEmailService emailService;    private AuftragsAbwicklung auftragsAbwicklung;    private IAuftrag auftrag;     [Test]    public void AuftragsAbwicklung_sendet_Email_wenn_der_Auftrag_ausgeliefert_wird() {        // Arrange        emailService = MockRepository.GenerateMock<IEmailService>();        auftrag = MockRepository.GenerateStub<IAuftrag>();        auftragsAbwicklung = new AuftragsAbwicklung(emailService);         // Act        auftragsAbwicklung.Liefern(auftrag);         // Assert        emailService.AssertWasCalled(x => x.Send());        auftrag.AssertWasCalled(x => x.Ausgeliefert());    }}

Page 60: Stefan Lieser . Wer erstellt regelmäßig Unit Tests?

Context/Specification

Page 61: Stefan Lieser . Wer erstellt regelmäßig Unit Tests?

[Concern(typeof(AuftragsAbwicklung))]public class Wenn_ein_Auftrag_ausgeliefert_wird : InstanceContextSpecification<AuftragsAbwicklung>{    private IEmailService emailService;    private IAuftrag auftrag;     protected override void establish_context() {        emailService = dependency<IEmailService>();        auftrag = dependency<IAuftrag>();    }     protected override AuftragsAbwicklung create_sut() {        return new AuftragsAbwicklung(emailService);    }     protected override void because() {        sut.Liefern(auftrag);    }     [Observation]    public void wird_eine_Email_gesendet() {        emailService.was_told_to(x => x.Send());    }     [Observation]    public void wird_der_Auftrag_in_den_Status_Ausgeliefert_versetzt() {        auftrag.was_told_to(x => x.Ausgeliefert());    }}

Page 62: Stefan Lieser . Wer erstellt regelmäßig Unit Tests?

BDD Frameworks

Page 63: Stefan Lieser . Wer erstellt regelmäßig Unit Tests?

JP Boodhoo http://blog.jpboodhoo.com

xunit.bddextensions (Björn Rochel) http://code.google.com/p/xunitbddextensions

SpecUnit (Scott Bellware) http://code.google.com/p/specunit-net/

Page 64: Stefan Lieser . Wer erstellt regelmäßig Unit Tests?

NBehave (Dan North)enthält Behave# und NSpec http://nbehave.org/ http://code.google.com/p/nbehave/

MSpec (Aaron Jensen) http://codebetter.com/blogs/aaron.jensen/archive/2008/09/02/mspec-v0-2.aspx

Page 65: Stefan Lieser . Wer erstellt regelmäßig Unit Tests?

Bildnachweishttp://flickr.com/photos/hurleygurley/4338767/sizes/o/http://flickr.com/photos/nitram75/2532252156/sizes/l/http://flickr.com/photos/igelchen/228253414/sizes/o/http://flickr.com/photos/lincolnblues/1413187481/sizes/l/http://flickr.com/photos/c-o-d/553155111/sizes/l/http://flickr.com/photos/thesteinbergs/165513589/sizes/l/in/photostream/http://flickr.com/photos/julianbleecker/426323201/sizes/l/http://flickr.com/photos/peterpanter/2381811041/sizes/o/http://flickr.com/photos/mail2pete/3146580621/sizes/l/http://www.erdgasfahren.ch/fileadmin/user_upload/01_News/Pressebereich/Pressedownloads/Sonstige/Zafira_Crash_Test.jpghttp://flickr.com/photos/moe/8322628/sizes/l/http://flickr.com/photos/wklemp/2210135334/sizes/l/http://www.jetbrains.com/resharper/features/unit_testing.html#Unit_Test_Sessionshttp://flickr.com/photos/dalmet/496531540/sizes/l/http://flickr.com/photos/alfreddiem/231306790/sizes/o/http://a.abcnews.com/images/Health/apg_crash_test_070517_ms.jpghttp://flickr.com/photos/hisebuse/2148222331/sizes/l/http://flickr.com/photos/londonannie/2231592618/sizes/l/in/set-72157603821699832/http://flickr.com/photos/kid_schoko/2542422970/sizes/l/http://flickr.com/photos/prettydaisies/2369449704/sizes/l/http://flickr.com/photos/alphachimpstudio/43818104/sizes/l/

Page 66: Stefan Lieser . Wer erstellt regelmäßig Unit Tests?