Thomas Carpaye
Thomas Ployon
Déroulé type de la journé
9:30 | Accueil Tour de table des personnes - Présentation - Que souhaitent elles apprendre |
10:00 | Théorie : - C'est quoi le TDD ? - Démo : Kata "FizzBuzz" (par les formateurs) - ShaHaRi et les Kata |
10:30 | Pratique: Kata "Leap Year" (par les participants) |
12:00 | Repas |
13:30 | Théorie: - C'est quoi un Test ? Pourquoi on teste ? - Anatomie d'un test - Comment écrire un test ? |
13:45 | Théorie: Quel est le prochain test à écrire ? - C'est quoi un test pour le TDD ? - Baby Steps (découper le problème) - TPP |
14:00 | Pratique : Kata "Roman Numerals" |
15:30 | Théorie TDD As If You Meant It |
16:00 | Pratique: Kata "Mars Rover" en Mob avec une approche "Inside Out" sans le dire |
17:30 | Rétro de la journée et Conclusion |
Selon vous ?
Juste ça ?
RED
Make it fail
GREEN
Make it pass
REFACTOR
Make it better
par vos formateurs
Vous devez écrire un test qui échoue avant d’écrire tout code de production
Vous ne devez pas écrire plus d’un test suffisant pour échouer, ou qui échouera à la compilation
Vous ne devez pas écrire plus de code que nécessaire pour faire passer le test en cours
Interdit d’écrire du code,
sans test en échec
qui prouve que ce code est nécessaire.
Interdit d’écrire
plus d’un test en échec
à la fois
Interdit d’écrire
plus de code que nécessaire,
pour faire passer le test en cours.
Write a function that returns true or false depending on whether its input integer is a leap year or not.
A leap year is divisible by 4, but is not otherwise divisible by 100, unless it is also divisible by 400.
For example, 2001 is a typical common year
and 1996 is a typical leap year,
whereas 1900 is an atypical common year
and 2000 is an atypical leap year.
Selon vous ?
Processus qui consiste à
Effectuer des Actions sur un Système
Analyser comment celui-ci répond
#RED
#RED
#GREEN
#GREEN
#REFACTOR
#REFACTOR
@Test
void should_print_fizz_when_input_is_multiple_of_three() {
}
@Test
void should_print_fizz_when_input_is_multiple_of_three() {
// Then
assertThat(result).isEqualTo("fizz");
}
@Test
void should_print_fizz_when_input_is_multiple_of_three() {
// When
String result = fizzBuzzOf(input);
// Then
assertThat(result).isEqualTo("fizz");
}
@Test
void should_print_fizz_when_input_is_multiple_of_three() {
// Given
int input = 3;
// When
String result = fizzBuzzOf(input);
// Then
assertThat(result).isEqualTo("fizz");
}
@Test
void should_print_fizz_when_input_is_multiple_of_three() {
// Arrange
int input = 3;
// Act
String result = fizzBuzzOf(input);
// Assert
assertThat(result).isEqualTo("fizz");
}
@Test
void should_be_able_to_send_an_email() {
// GIVEN
Session session = Session.getInstance(new Properties(), null);
Message msg = createMessage(session);
// WHEN
sendMessage(session, msg);
// THEN
MimeMessage[] messages = mailServer.getReceivedMessages();
assertThat(messages).first().isEqualTo(expectedEmail);
}
Fast
Isolated
Repeatable
Self verifying
Timely / Thorough
Baby steps
TPP
Transformation Priority Premises
As the tests get more specific, the code gets more generic.
Robert C. Martin (C. stands for Cringe)
Axes de complexité
même le code de prod
par vos formateurs
is NOT about testing
is NOT about test first
is a methodology
is about design and development
is your assistant