1 / 39

Wat is jouw excuus om niet te unit testen? Wat kun je er aan doen?

Wat is jouw excuus om niet te unit testen? Wat kun je er aan doen?. Wouter de Kort Coach/trainer/auteur @ Seize IT. wouter@seizeit.nl @ wouterdekort www.seizeit.nl. Agenda. Wat is unit testen ook al weer? Hoe past TDD daar in? Excuses & oplossingen Tussen de oren In de praktijk.

Download Presentation

Wat is jouw excuus om niet te unit testen? Wat kun je er aan doen?

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Wat is jouw excuus om niet te unit testen?Wat kun je er aan doen? Wouter de Kort Coach/trainer/auteur @ Seize IT wouter@seizeit.nl @wouterdekort www.seizeit.nl

  2. Agenda • Wat is unit testen ook al weer? • Hoe past TDD daar in? • Excuses & oplossingen • Tussen de oren • In de praktijk

  3. Wat is een unit test? • Gewone code • Test een ander stuk code • Automatisch uitvoerbaar

  4. Unit Test beloften • Bugs • Aanpassingen • Integratie • Documentatie • Design Demo

  5. Agenda • Wat is Unit Testen ook al weer? • Hoe past TDD daar in? • Excuses & Oplossingen • De grote lijnen • De details

  6. Zonder TDD

  7. Met TDD

  8. Met TDD

  9. Hoe doe je dat? • Beslis wat je wilt doen • Schrijf een test • Test • Schrijf de code • Test • Refactor Demo

  10. Agenda • Wat is unit testen ook al weer? • Hoe past TDD daar in? • Excuses & oplossingen • Tussen de oren • In de praktijk

  11. Tussen de oren

  12. Excuses Type 1 • Het kost teveel tijd om ze te schrijven • Het mag niet van het management • Ik ben geen tester

  13. Tijd • Type wat code • Maak een paar schetsen • Start de debugger • Wacht op de debugger • Zet een breakpoint • Lees je code een paar keer • Vraag anderen om mee te kijken • Staar uit het raam • Gooi iets naar een collega • Google voor een oplossing • Type wat code • …

  14. “The only way to go fast is to go well” Robert Martin

  15. Anderen meekrijgen • Bottom-up • Top-down http://biblio.gdinwiddie.com/biblio/StudiesOfTestDrivenDevelopment

  16. “Het is nietmijnwerkomtetesten”

  17. In de praktijk

  18. Excuses Type 2 • De tests duren te lang • De test zijn niet te onderhouden • Mijn code is niet te testen

  19. Probleemwat is een unit test nu eigenlijk

  20. Test piramide

  21. Wat test je bij een unit test? “ Intuitively, one can view a unit as the smallest testable part of an application” Wikipedia

  22. Designing for testability • Controversieel • Zorgt voor betere code

  23. Architectuur

  24. Architectuur publicclassCar { public Car() { _engine = newEngine(); } } publicclassEngine { public Engine() { _battery = newBattery(); _transmission = newTransmission(); } }

  25. “new” is evil!

  26. DependencyInjection publicclassCar { public Car() { _engine = newEngine(); } } publicclassCar { publicCar(IEngine engine) { _engine = engine; } }

  27. Hoe knoop je het aan elkaar? • DependencyInjection Container IKernel kernel = newStandardKernel(); kernel.Bind<IEngine>().To<Engine>(); kernel.Bind<Car>().ToSelf(); Demo

  28. Mocking • Vervangen van dependencies in test IEngineengineStub= MockRepository.GenerateStub<IEngine>(); Demo

  29. Dus… • Test in volledige isolatie • DependencyInjection / Inversion of Control • Mocking & Stubbing

  30. Waar hebben we het over gehad • Unit Testen bied mogelijkheden • TDD helpt • Designing for testability • DependencyInjection

  31. Waar begin ik? • Bugs • Nieuwe functionaliteit

  32. Unit Testenzonder excuses

  33. Vragen

  34. Wouter de Kort Coach/trainer/auteur @ Seize IT wouter@seizeit.nl @wouterdekort www.seizeit.nl

  35. Probleemonderhoudbaarheid

  36. Koppeling • Klaarzetten van je test AddressbillingAddress= newAddress(“Concourslaan 17", "Groningen", "9727KC“, “Gasunie"); AddressshippingAddress= newAddress(“E van de Beekstraat 354", “Schiphol", “1118 CZ", “Microsoft"); Customercustomer= newCustomer(99, "Piet", "Klaassens", 30, billingAddress, shippingAddress); Productproduct = newProduct(88, “Surface PRO", 499); Invoiceinvoice = newInvoice(customer);

  37. AutoFixture https://github.com/AutoFixture/AutoFixture Fixturefixture = newFixture(); Customercustomer = fixture.Build<Customer>() .With(c => c.Discount, discount) .CreateAnonymous(); Productproduct = fixture.Build<Product>() .With(p => p.Price, productPrice) .CreateAnonymous(); Demo

More Related