Upload
jacob-kohl
View
221
Download
0
Embed Size (px)
Citation preview
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/