+ All Categories
Home > Technology > Dependency injection en testen

Dependency injection en testen

Date post: 08-Feb-2017
Category:
Upload: jandv
View: 25 times
Download: 1 times
Share this document with a friend

of 22

Click here to load reader

Transcript

Dependency Injection & Testen

BasisDependency Injection & Testen

AgendaDependency InjectionTestenDemoLive proberen!

Waarom?SOLIDSingle Responsibility Principlea class should have only a single responsibilityOpen/closed Principlesoftware entities should be open for extension, but closed for modification.Liskov substitution principleobjects in a program should be replaceable with instances of their subtypes without altering the correctness of that program.Interface segregation principlemany client-specific interfaces are better than one general-purpose interface.Dependency inversion principleone should Depend upon Abstractions. Do not depend upon concretions.

SOLID principes is basis voor goede & onderhoudbare software.

SRP = Klasse/methode doet maar 1 dingOpen/Closed = Open for extension, closed for modification, overerving en polymorfisme, interfaces, abstracte klassenLiskov = S is subtype van T, dan mag T vervangen worden door S in de code. Werkt met contravariance & covarianceInterface segregation principle = Specifieke interfaces maken, niet generieke waardoor client ongebruikte methoden krijgtDI = ontkoppelen van modules3

Waarom?Code wordt schonerOverzicht van afhankelijkhedenOverzicht van gebruikte typenBetere testbaarheid

Dependency InversionTraditioneel schema

Dependency Inversion

Concreet voorbeeld

In de praktijkImplementatie via patternsService LocatorDependency Injection

2 bekende patterns om dependency inversion toe te passenService Locator is men redelijk over eens dat het niet gebruikt moet worden voor dit. Maakt code minder leesbaar en onderhoudbaar omdat breaking changes niet direct duidelijk zijn.Ook lastig testbaarDependency InjectionVia constructor injectieGoed testbaarVia properties afgeradenAfhankelijkheden gelijk zichtbaar

8

Service Locator

Dependency Injection

Aanroepen - Basis

Dit is in basis wat er gebeurd

11

Testen

FrameworksAlgemene registratieVia frameworks injectieHaken in op bestaande frameworksMVCWebFormsConsole applicatiesWCFhttps://autofac.org/

Voorbeeld

Slecht voorbeeld uiteraard!14

Real-life voorbeeld

TestenUnit testenTesten functionaliteit van 1 onderdeel1 klasse, 1 methode, 1 flowIntegratie testenTest de integratie van meerdere onderdelenService Logica Data access DatabaseRegressie testenTest functionele flowsUI Database UI

Integratietesten meest eenvoudig in brownfield applicatiesRegressietesten handig, maar neemt veel tijd in beslagUnittesten goed te doen met DI.16

Regressie testenSeleniumWaTin

Test de UI

Integratie- & UnittestenTechnisch vergelijkbare implementatie / opbouwVerschil is mindsetIntegratietesten heeft (backend) configuratieUnittesten heeft mock/stub/fake implementaties

Libraries.NET 4.xMSTest (of XUnit)MoqFluentAssertions.NET CoreXUnit (of MSTest)MoqFluentAssertions

.NET Core werkt momenteel beter met XunitXunit werkt cross-platform19

Test frameworkMSTest

XUnit

MockingNep objecten makenVooraf gedefinieerde resultatenControleerbaar

Mock objecten makenOpzetten wat een methode terug geeft

21

FluentAssertionsLeesbare assertsHandige helpers


Recommended