TDD outside in - Coding Dojo Lyon
-
Upload
florentpellet -
Category
Software
-
view
555 -
download
2
Transcript of TDD outside in - Coding Dojo Lyon
TDD Outside-InCODING DOJO DU 24 NOVEMBRE 2015
Sponsors
Fusion du
Coding Dojo et du
Software Craftsmanship
http://www.meetup.com/fr/Software-Craftsmanship-Lyon/
Evènements à venir
01/12: CARA Lyon“SAFe vu par des "clients" certifiés Scaled Agile Academy”
07/12: Software Craftsmanship Lyon“Event Storming sur un vrai projet”
http://www.lyontechhub.org/
TDD Classique« Chicago school »
• Le TDD enseigné par Kent Beck, Uncle Bob…
• Le TDD généralement mis en œuvre dans les kata
• Concepts associés :• Baby steps• Design émergent
(Refactoring)• Utilise peu de Mock
TDD
RED
GREENREFACTOR
A
D
B C
class ClassAShould { do_something()…
do_something_else()…
do_this_other_thing()…
do…do…do…
}
TDD Outside-in« London school »
• Réflexion sur les responsabilités en amonts
• Approche « Mockist »• Le design se fait dans le
« Red »• Part toujours de
l’exterieur vers l’interieur
TDD(Outside-in)
RED
GREENREFACTOR
A
C
B AD
DB
UT
A
B
BAC
IMDB
C’
B’
UT
C’UT
IT
AT
Crédit : Sandro MANCUSO@sandromancuso
AcceptanceTest
TDD
Ecrire un T.Uen échec
Le faire passer
Refactoriser
Considérer un testen échec
N itérations
Bank Kata
Application bancaire simple : Déposer sur un compte Retirer d’un compte Imprimer un relevé de banque dans la console
Critère d’acceptation : Le relevé doit avoir le format suivant :
DATE | AMOUNT | BALANCE
10/04/2014 | 500.00 | 1400.00
02/04/2014 | -100.00 | 900.00
01/04/2014 | 1000.00 | 1000.00
Commencer par un test d’acceptation
Account Service
public class AccountService {
public void deposit(int amount);
public void withdraw(int amount);
public void printStatement();
}
Proposed acceptance test starting point;
@RunWith(MockitoJUntiRunner.class)public class PrintStatementFeature {
@Mock Console console;
@Test public voidprint_statement_containing_transactions_in_reverse_chronological_order() {
AccountService accountService = new AccountService();
accountService.deposit(1000); accountService.withdraw(100); accountService.deposit(500);
accountService.printStatement();
InOrder inOrder = inOrder(console);inOrder.verify(console).printLine("DATE | AMOUNT | BALANCE");inOrder.verify(console).printLine("10/04/2014 | 500.00 | 1400.00");inOrder.verify(console).printLine("02/04/2014 | -100.00 | 900.00");inOrder.verify(console).printLine("01/04/2014 | 1000.00 | 1000.00");
}}