SlideShare una empresa de Scribd logo
1 de 14
Unit Testing & TDD
Jean-Baptiste Vigneron
j.vigneron@epsi.fr
@jbvigneron
David Bottiau
david.bottiau@epsi.fr
@dbottiau
• Vérifier un processus
• Eviter les imprévus
• Ne pas « régresser »
• Passer plus de temps à
développer qu'à supprimer les
bugs
Les tests unitaires ?
Pourquoi faire ?
• 1 livrable = 1 blocs de tests
• A chaque livrable, vérification des
nouveaux et des anciens tests
• Si > 1 test échoue
=> régression probable
=> livrable invalide
La non-régression
La méthode AAA
1. Arrange
• Création des objets
2. Act
• Exécution des méthodes
• Obtention des valeurs
3. Assert
• Vérification des données
[TestClass]
public class GameTest
{
[TestMethod]
public void Can_Instantiate_Soldiers()
{
// arrange – create objects
var soldier = new Soldier();
// act – execute actions (methods)
// assert – verify values
Assert.AreEqual(soldier.Health, 100);
Assert.AreEqual(soldier.Attack, 10);
Assert.AreEqual(soldier.Defense, 7);
Assert.AreEqual(soldier.IsDead, false);
}
}
Les attributs
Attribut Utilité
[TestClass] Précise que la classe est une classe de tests : repérable par l’outil
Test Runner
[TestMethod] Précise que la méthode est un test de la classe de tests :
repérable par l’outil Test Runner
[ExpectedException] Evite l’échec d’un test en sachant quel type d’exception pourrait
être lancée lors de l’exécution du test
[ClassInitialize] Permet d’initialiser les propriétés de la classe de test
[ClassCleanup] Permet de « nettoyer » la classe à la fin des tests
[TestInitialize] Permet de réinitialiser les propriétés de la classe à chaque test
[TestCleanup] Permet de « nettoyer » la classe à chaque fin de test
TDD - Test Driven-Development
TDD - Fail
Test
[TestClass]
public class MathsTest
{
[TestMethod]
public void Can_Add()
{
// act
int x = Maths.Add(4, 9);
// assert
Assert.AreEqual(x, 13);
}
}
Code
public static class Maths
{
public static int Add(int x, int y)
{
throw new NotImplementedException();
}
}
TDD - Pass
Test
[TestClass]
public class MathsTest
{
[TestMethod]
public void Can_Add()
{
// act
int x = Maths.Add(4, 9);
// assert
Assert.AreEqual(x, 13);
}
}
Code
public static class Maths
{
public static int Add(int x, int y)
{
return 13;
}
}
TDD - Refactor
Test
[TestClass]
public class MathsTest
{
[TestMethod]
public void Can_Add()
{
// act
int x = Maths.Add(4, 9);
// assert
Assert.AreEqual(x, 13);
}
[TestMethod]
public void Can_Add_Two_RandomNumbers()
{
// arrange
Random random = new Random();
int a = random.Next(100), b = random.Next(100);
// act
int x = Maths.Add(a, b);
// assert
Assert.AreEqual(x, a + b);
}
}
Code
public static class Maths
{
public static int Add(int x, int y)
{
// TODO : Refactor this
return 13;
}
}
TDD & Pair programming
Pilot / Driver
• Développe les fonctionnalités
en fonction du test à réussir
• Exécute le test de réussite
tant qu’il échoue
• Pose des conditions de
refactoring (futurs tests)
Copilot / Partner
• Développe les tests
• Exécute le test d’échec
• Exécute le test de réussite
final
Automatisation des tests
L’intégration continue
• Déploiement automatique grâce à
• Visual Studio Online
• Azure
• Automatisation des tests
• à chaque Build (déploiement)
• à chaque commit / push (TFS / Git)
Not only Unit Test
• Tests de l’interface (UI)
• Tester l’interface et les actions potentielles
• Tests d'intégration
• A l’inverse des tests unitaires, on teste l’interaction entre les
fonctionnalités
• Tests de charge
• Tester les performances et la résistance de l’application
En résumé…
Test - Code - Test - ...
• Maximiser votre couverture de code
• Au plus votre code est testé, au plus votre code est fonctionnel
• Utiliser TDD
• Soyez sûr de votre code avant même qu'il ne soit écrit
• Eviter les imprévus
• Automatiser les tests
• Soyez sûr que le livrable est fonctionnel à tout moment
• Produit livré sans effort avec l’intégration continue
Ressources
• https://github.com/EPSILab/UnitTests

Más contenido relacionado

Destacado

Intro sur les tests unitaires
Intro sur les tests unitairesIntro sur les tests unitaires
Intro sur les tests unitairesPHPPRO
 
TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)
TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)
TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)French Scrum User Group
 
Tests d'Acceptance et Specflow
Tests d'Acceptance et SpecflowTests d'Acceptance et Specflow
Tests d'Acceptance et SpecflowCedricRup
 
L'amélioration des tests unitaires par le refactoring
L'amélioration des tests unitaires par le refactoringL'amélioration des tests unitaires par le refactoring
L'amélioration des tests unitaires par le refactoringPascal Laurin
 
Presentacion en prezi
Presentacion en preziPresentacion en prezi
Presentacion en prezibedoya2588205
 
La récession : comment s'en sortir plus fort
La récession : comment s'en sortir plus fortLa récession : comment s'en sortir plus fort
La récession : comment s'en sortir plus fortGroupe Dancause
 
Marisol ortiz guzman conectores
Marisol ortiz guzman conectoresMarisol ortiz guzman conectores
Marisol ortiz guzman conectoresmarisolortizguzman
 
Futbol
FutbolFutbol
FutbolMay Gt
 
Glacier suisse -o.legen-
Glacier suisse -o.legen-Glacier suisse -o.legen-
Glacier suisse -o.legen-SIBIOS
 
Planificacion corregida[1]
Planificacion corregida[1]Planificacion corregida[1]
Planificacion corregida[1]Nameless RV
 
Constituciones mexicanas3
Constituciones mexicanas3Constituciones mexicanas3
Constituciones mexicanas3Nameless RV
 
Res0072013sad
Res0072013sadRes0072013sad
Res0072013sadConselhos
 
Twitter et les membres du gouvernement - 2803 MEDIA
Twitter et les membres du gouvernement - 2803  MEDIATwitter et les membres du gouvernement - 2803  MEDIA
Twitter et les membres du gouvernement - 2803 MEDIA2803 MEDIA
 
2013stag da4 bouzegzibillel_colinnogaretarnaud_follainarthur_vigneauremi
2013stag da4 bouzegzibillel_colinnogaretarnaud_follainarthur_vigneauremi2013stag da4 bouzegzibillel_colinnogaretarnaud_follainarthur_vigneauremi
2013stag da4 bouzegzibillel_colinnogaretarnaud_follainarthur_vigneauremiArthur Follain
 

Destacado (20)

Intro sur les tests unitaires
Intro sur les tests unitairesIntro sur les tests unitaires
Intro sur les tests unitaires
 
Ingénierie du test 0.9
Ingénierie du test 0.9Ingénierie du test 0.9
Ingénierie du test 0.9
 
TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)
TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)
TDD/BDD: ou comment j’ai appris à ne plus m’en faire avec les tests (et la doc)
 
Tests d'Acceptance et Specflow
Tests d'Acceptance et SpecflowTests d'Acceptance et Specflow
Tests d'Acceptance et Specflow
 
L'amélioration des tests unitaires par le refactoring
L'amélioration des tests unitaires par le refactoringL'amélioration des tests unitaires par le refactoring
L'amélioration des tests unitaires par le refactoring
 
Presentacion en prezi
Presentacion en preziPresentacion en prezi
Presentacion en prezi
 
La récession : comment s'en sortir plus fort
La récession : comment s'en sortir plus fortLa récession : comment s'en sortir plus fort
La récession : comment s'en sortir plus fort
 
Los 7 saberes
Los 7 saberesLos 7 saberes
Los 7 saberes
 
Blogger tefa
Blogger tefaBlogger tefa
Blogger tefa
 
Marisol ortiz guzman conectores
Marisol ortiz guzman conectoresMarisol ortiz guzman conectores
Marisol ortiz guzman conectores
 
Futbol
FutbolFutbol
Futbol
 
Glacier suisse -o.legen-
Glacier suisse -o.legen-Glacier suisse -o.legen-
Glacier suisse -o.legen-
 
El cirujano clandestino
El cirujano  clandestinoEl cirujano  clandestino
El cirujano clandestino
 
Planificacion corregida[1]
Planificacion corregida[1]Planificacion corregida[1]
Planificacion corregida[1]
 
Constituciones mexicanas3
Constituciones mexicanas3Constituciones mexicanas3
Constituciones mexicanas3
 
Res0072013sad
Res0072013sadRes0072013sad
Res0072013sad
 
Twitter et les membres du gouvernement - 2803 MEDIA
Twitter et les membres du gouvernement - 2803  MEDIATwitter et les membres du gouvernement - 2803  MEDIA
Twitter et les membres du gouvernement - 2803 MEDIA
 
2013stag da4 bouzegzibillel_colinnogaretarnaud_follainarthur_vigneauremi
2013stag da4 bouzegzibillel_colinnogaretarnaud_follainarthur_vigneauremi2013stag da4 bouzegzibillel_colinnogaretarnaud_follainarthur_vigneauremi
2013stag da4 bouzegzibillel_colinnogaretarnaud_follainarthur_vigneauremi
 
Netiquetas ivan
Netiquetas ivanNetiquetas ivan
Netiquetas ivan
 
Aulas digitales móviles
Aulas digitales móvilesAulas digitales móviles
Aulas digitales móviles
 

Similar a Unit testing and TDD

testUnitaire (1).pptx
testUnitaire (1).pptxtestUnitaire (1).pptx
testUnitaire (1).pptxManalAg
 
Comment écrire du code testable ?
Comment écrire du code testable ?Comment écrire du code testable ?
Comment écrire du code testable ?Fou Cha
 
Tester unitairement une application java
Tester unitairement une application javaTester unitairement une application java
Tester unitairement une application javaAntoine Rey
 
coursJavaJUnit.pdf
coursJavaJUnit.pdfcoursJavaJUnit.pdf
coursJavaJUnit.pdfMorhyDia
 
7 astuces pour améliorer vos tests unitaires
7 astuces pour améliorer vos tests unitaires7 astuces pour améliorer vos tests unitaires
7 astuces pour améliorer vos tests unitairesPascal Laurin
 
Déployer avec les tests
Déployer avec les testsDéployer avec les tests
Déployer avec les testsneuros
 
Introduction à JavaScript
Introduction à JavaScriptIntroduction à JavaScript
Introduction à JavaScriptMicrosoft
 
Fondamentaux portée - contexte - function ms tech days
Fondamentaux   portée - contexte - function ms tech daysFondamentaux   portée - contexte - function ms tech days
Fondamentaux portée - contexte - function ms tech daysJean-Pierre Vincent
 
Td serie a-abstract-cast-heritage
Td serie a-abstract-cast-heritageTd serie a-abstract-cast-heritage
Td serie a-abstract-cast-heritageAmel Morchdi
 
Formation Gratuite Total Tests par les experts Java Ippon
Formation Gratuite Total Tests par les experts Java Ippon Formation Gratuite Total Tests par les experts Java Ippon
Formation Gratuite Total Tests par les experts Java Ippon Ippon
 
Automatisation des tests - objectifs et concepts - partie 1
Automatisation des tests  - objectifs et concepts - partie 1Automatisation des tests  - objectifs et concepts - partie 1
Automatisation des tests - objectifs et concepts - partie 1Christophe Rochefolle
 
Tester les applications Zend Framework
Tester les applications Zend FrameworkTester les applications Zend Framework
Tester les applications Zend FrameworkMickael Perraud
 
Formation tests decembre2010
Formation tests decembre2010Formation tests decembre2010
Formation tests decembre2010Fou Cha
 
The Hour of Code by Leanbase
The Hour of Code by LeanbaseThe Hour of Code by Leanbase
The Hour of Code by Leanbasemaxlacro
 
Les tests comportementaux avec aspnet core
Les tests comportementaux avec aspnet coreLes tests comportementaux avec aspnet core
Les tests comportementaux avec aspnet coreArnaud Auroux
 

Similar a Unit testing and TDD (20)

testUnitaire (1).pptx
testUnitaire (1).pptxtestUnitaire (1).pptx
testUnitaire (1).pptx
 
J Unit
J UnitJ Unit
J Unit
 
Comment écrire du code testable ?
Comment écrire du code testable ?Comment écrire du code testable ?
Comment écrire du code testable ?
 
Tasteful
TastefulTasteful
Tasteful
 
Tester unitairement une application java
Tester unitairement une application javaTester unitairement une application java
Tester unitairement une application java
 
coursJavaJUnit.pdf
coursJavaJUnit.pdfcoursJavaJUnit.pdf
coursJavaJUnit.pdf
 
7 astuces pour améliorer vos tests unitaires
7 astuces pour améliorer vos tests unitaires7 astuces pour améliorer vos tests unitaires
7 astuces pour améliorer vos tests unitaires
 
Déployer avec les tests
Déployer avec les testsDéployer avec les tests
Déployer avec les tests
 
Bbl sur les tests
Bbl sur les testsBbl sur les tests
Bbl sur les tests
 
Introduction à JavaScript
Introduction à JavaScriptIntroduction à JavaScript
Introduction à JavaScript
 
Fondamentaux portée - contexte - function ms tech days
Fondamentaux   portée - contexte - function ms tech daysFondamentaux   portée - contexte - function ms tech days
Fondamentaux portée - contexte - function ms tech days
 
Tests unitaires : Utilisation de la librairie CUnit
Tests unitaires : Utilisation de la librairie CUnitTests unitaires : Utilisation de la librairie CUnit
Tests unitaires : Utilisation de la librairie CUnit
 
Td serie a-abstract-cast-heritage
Td serie a-abstract-cast-heritageTd serie a-abstract-cast-heritage
Td serie a-abstract-cast-heritage
 
Formation Gratuite Total Tests par les experts Java Ippon
Formation Gratuite Total Tests par les experts Java Ippon Formation Gratuite Total Tests par les experts Java Ippon
Formation Gratuite Total Tests par les experts Java Ippon
 
Automatisation des tests - objectifs et concepts - partie 1
Automatisation des tests  - objectifs et concepts - partie 1Automatisation des tests  - objectifs et concepts - partie 1
Automatisation des tests - objectifs et concepts - partie 1
 
Test logiciel
Test logicielTest logiciel
Test logiciel
 
Tester les applications Zend Framework
Tester les applications Zend FrameworkTester les applications Zend Framework
Tester les applications Zend Framework
 
Formation tests decembre2010
Formation tests decembre2010Formation tests decembre2010
Formation tests decembre2010
 
The Hour of Code by Leanbase
The Hour of Code by LeanbaseThe Hour of Code by Leanbase
The Hour of Code by Leanbase
 
Les tests comportementaux avec aspnet core
Les tests comportementaux avec aspnet coreLes tests comportementaux avec aspnet core
Les tests comportementaux avec aspnet core
 

Unit testing and TDD

  • 1. Unit Testing & TDD Jean-Baptiste Vigneron j.vigneron@epsi.fr @jbvigneron David Bottiau david.bottiau@epsi.fr @dbottiau
  • 2. • Vérifier un processus • Eviter les imprévus • Ne pas « régresser » • Passer plus de temps à développer qu'à supprimer les bugs Les tests unitaires ? Pourquoi faire ?
  • 3. • 1 livrable = 1 blocs de tests • A chaque livrable, vérification des nouveaux et des anciens tests • Si > 1 test échoue => régression probable => livrable invalide La non-régression
  • 4. La méthode AAA 1. Arrange • Création des objets 2. Act • Exécution des méthodes • Obtention des valeurs 3. Assert • Vérification des données [TestClass] public class GameTest { [TestMethod] public void Can_Instantiate_Soldiers() { // arrange – create objects var soldier = new Soldier(); // act – execute actions (methods) // assert – verify values Assert.AreEqual(soldier.Health, 100); Assert.AreEqual(soldier.Attack, 10); Assert.AreEqual(soldier.Defense, 7); Assert.AreEqual(soldier.IsDead, false); } }
  • 5. Les attributs Attribut Utilité [TestClass] Précise que la classe est une classe de tests : repérable par l’outil Test Runner [TestMethod] Précise que la méthode est un test de la classe de tests : repérable par l’outil Test Runner [ExpectedException] Evite l’échec d’un test en sachant quel type d’exception pourrait être lancée lors de l’exécution du test [ClassInitialize] Permet d’initialiser les propriétés de la classe de test [ClassCleanup] Permet de « nettoyer » la classe à la fin des tests [TestInitialize] Permet de réinitialiser les propriétés de la classe à chaque test [TestCleanup] Permet de « nettoyer » la classe à chaque fin de test
  • 6. TDD - Test Driven-Development
  • 7. TDD - Fail Test [TestClass] public class MathsTest { [TestMethod] public void Can_Add() { // act int x = Maths.Add(4, 9); // assert Assert.AreEqual(x, 13); } } Code public static class Maths { public static int Add(int x, int y) { throw new NotImplementedException(); } }
  • 8. TDD - Pass Test [TestClass] public class MathsTest { [TestMethod] public void Can_Add() { // act int x = Maths.Add(4, 9); // assert Assert.AreEqual(x, 13); } } Code public static class Maths { public static int Add(int x, int y) { return 13; } }
  • 9. TDD - Refactor Test [TestClass] public class MathsTest { [TestMethod] public void Can_Add() { // act int x = Maths.Add(4, 9); // assert Assert.AreEqual(x, 13); } [TestMethod] public void Can_Add_Two_RandomNumbers() { // arrange Random random = new Random(); int a = random.Next(100), b = random.Next(100); // act int x = Maths.Add(a, b); // assert Assert.AreEqual(x, a + b); } } Code public static class Maths { public static int Add(int x, int y) { // TODO : Refactor this return 13; } }
  • 10. TDD & Pair programming Pilot / Driver • Développe les fonctionnalités en fonction du test à réussir • Exécute le test de réussite tant qu’il échoue • Pose des conditions de refactoring (futurs tests) Copilot / Partner • Développe les tests • Exécute le test d’échec • Exécute le test de réussite final
  • 11. Automatisation des tests L’intégration continue • Déploiement automatique grâce à • Visual Studio Online • Azure • Automatisation des tests • à chaque Build (déploiement) • à chaque commit / push (TFS / Git)
  • 12. Not only Unit Test • Tests de l’interface (UI) • Tester l’interface et les actions potentielles • Tests d'intégration • A l’inverse des tests unitaires, on teste l’interaction entre les fonctionnalités • Tests de charge • Tester les performances et la résistance de l’application
  • 13. En résumé… Test - Code - Test - ... • Maximiser votre couverture de code • Au plus votre code est testé, au plus votre code est fonctionnel • Utiliser TDD • Soyez sûr de votre code avant même qu'il ne soit écrit • Eviter les imprévus • Automatiser les tests • Soyez sûr que le livrable est fonctionnel à tout moment • Produit livré sans effort avec l’intégration continue