Dependency injection en testen
-
Upload
jandv -
Category
Technology
-
view
24 -
download
1
Transcript of Dependency injection en testen
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