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

Post on 06-Apr-2016

220 views 0 download

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

Stefan Lieserhttp://lieser-online.de

TestdrivenDevelopment -BDD - Style

Wer erstelltregelmäßig Unit

Tests?

Wer kennt seineTestabdeckung?

Wer erstellt Testsum Bugs zu

reproduzieren?

Wer erstellt Testsvor der

Implementierung?

TDD

TestDrivenDevelopment

TestFirst

Revolution!

Zeit

Test Code

Test= hinterher

Spracheformtdas Denken

Sapir-WhorfHypothese

?

BDD

BehaviorDrivenDevelopment

Evolution

SpecificationFirst

TestSpecification

Testen?

Das machen die Tester!

Das kostet zu viel Zeit!

Mein Code ist fehlerfrei!

Dafür sind wir da!

Sollen wir arbeitslos werden?

Ihr habt keine Ahnung!

TDD Entwicklung

Tests für vorhandenen Code

Vertrauen

Reduktion

Dokumentation

Offenbarung

Verhalten

Mockups

UserStories

Als Shopbenutzer

möchte ich Bücherin meinen Warenkorb legen

um meine Bestellung besserüberblicken zu können.

WhoWhatWhy

RoleGole

Motivation

Technologie

Business Domain

Sprache derDomain

verwenden

Business und Technikverwenden die selbe

Sprache!

It‘s all behavior

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

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

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

Als Benutzer desNachrichten Systems

möchte ich die 5 neustenNachrichten sehen

damit die Nachrichtenauf meinen Bildschirm passen

BDD =AutomatisierteAkzeptanztests

Unit Tests:Der Code ist richtig.

Akzeptanztests:Es ist der richtige Code.

Syntax

Assert.AreEqual(5, x);

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

x.ShouldBeEqualTo(5);

x.should_be_equal_to(5);

Arrange/Act/Assert

Setup/Exercise/Verify

[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());    }}

Context/Specification

[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());    }}

BDD Frameworks

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/

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

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/