Romain Berthon
#JobHacker
@RomainTrm
romainberthon.blog
Test Driven Development
Class under test
Mocks
Inputs
Outputs
Mock<IFoo> fooMock;
Mock<IBar> barMock;
// Given
fooMock.Setup(x => x.Foo(arg1)).Returns(arg2);
// When
var myClassUnderTest = new Class(fooMock, barMock);
var result = myClassUnderTest.DoSomething(arg1);
// Then
Assertion(result);
barMock.Verify(x => x.Bar(arg2));
Couplage fort
Cohérence du système ?
Deux écoles :
(Inside-out)
Robert C. Martin (aka Uncle Bob)
@unclebobmartin
(Outside-in)
Sandro Mancuso
@sandromancuso
(Outside-in)
Thomas Pierrain
@tpierrain
Mon contexte :
Définir l'état et tester système
Système
Given (events)
When
command / query
Then
Assertion
Etat ?
Réduire le couplage avec les tests
Réduire le couplage avec les tests
var app = MonApp.Create();
// Given
app.AddHistory(evt1, evt2, evt3);
app.DefineTime(givenTime);
// When
var controller = app.GetSomeController();
var result = controller.ExecuteCommand(arg1, arg2);
// Then
VerifyAssertion(result);
app.VerifyOnHistory(myAssertion);
Des comportements identiques
Système
IDataAccess
SqlDataAccess
InMemoryDataAccess
Infrastructure
Réduire le couplage avec les tests
Bénéfices et inconvénients
Mark Seemann
@ploeh
Romain Berthon
#JobHacker
@RomainTrm
romainberthon.blog