Site    : www.altnetfr.orgTwitter : @altnetfr et #altnetfrPropositions de sessions:sessions@altnetfr.org
BDD, TDD& SpecflowMathias KlubaTwitter: @mathiaskluba
RemerciementsOCTO pour l’accueilALT.Net FR pour l’organisation!
Au menu
PlanPourquoi faire des tests ?Qu’est-ce qu’un test unitaire ?Pourquoi est-ce devenu trop difficile d’écriredes tests ?Comm...
Pourquoi faire des tests ? Pour écrire du code sans bugs Pour écrire du code plus simple TDD, YAGNI, KISS Pour s’assurer q...
Qu’est-ce qu’un test unitaire ?           On test une « boite noire » (the Unit)           On fournit les données d’entré ...
Qu’est-ce qu’un test unitaire ?           Les données d’entré peuvent provenir des dépendances           Les données de so...
Pourquoi est-ce devenu trop difficile d’écrire des tests ?       Beaucoup de code pour construire les       données d’entr...
Pourquoi est-ce devenu trop difficile d’écrire des tests ?                       1 seul test                          318 ...
Pourquoi est-ce devenu trop difficile d’écrire des tests ?       Les Tests Unitaires: ça reste du code!       Ils devraien...
Comment Specflow rend les tests plus simple ?
Comment Specflow rend les tests plus simple ?    Ecrire des tests en Anglais        Ou Français, ou Allemand, etc. (40 lan...
Comment Specflow rend les tests plus simple ?    Force les développeurs à découper le test en    plusieurs étapes       Re...
Comment utiliser Specflow ?Integration VisualStudio   Génère des tests Nunit, mais aussi                               MST...
Comment utiliser Specflow ?   Feature: pour décrire brièvement la fonctionnalité et l’intention       In order to use MyAp...
Comment utiliser Specflow ?    REGEX pour « mapper » le Gherkin avec le code du test unitaire[Given("I’m on the Login Page...
Comment utiliser Specflow ?    On peut utiliser des @annotations pour décrire un    comportement commun@seleniumScenario: ...
Comment utiliser Specflow ?Pour des « User Acceptance Tests »Peuvent être « exécutés » manuellementPour des tests d’interf...
Comment utiliser Specflow ?Pour de pures « Tests unitaires »Plus facile à écrirePlus facile à lirePlus facile à comprendre...
Comment utiliser Specflow ?   Pur des tests de « données » (DAL)   Avec l’annotation @database@databaseScenario: Find the ...
Et les concurrents?GreenPepper?Fitness?Nécessite un “wiki” pour rédiger les scénariosNécessite un “runner” pour exécuter l...
LiensSpecflow   http://specflow.org/Gherkin  https://github.com/aslakhellesoy/cucumber/wiki/gherkinMartin Fowler: Business...
LiensUn très bon lien expliquant le BDD   http://www.arolla.fr/blog/2012/06/bdd-c-est-quoi-donc/Démo sur Github   https://...
DesQuestions ?
Merci !
Prochain SlideShare
Chargement dans…5
×

ALT.Net Juin 2012 - Specflow

2 430 vues

Publié le

Publié dans : Technologie
0 commentaire
0 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

Aucun téléchargement
Vues
Nombre de vues
2 430
Sur SlideShare
0
Issues des intégrations
0
Intégrations
1 141
Actions
Partages
0
Téléchargements
14
Commentaires
0
J’aime
0
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

ALT.Net Juin 2012 - Specflow

  1. 1. Site : www.altnetfr.orgTwitter : @altnetfr et #altnetfrPropositions de sessions:sessions@altnetfr.org
  2. 2. BDD, TDD& SpecflowMathias KlubaTwitter: @mathiaskluba
  3. 3. RemerciementsOCTO pour l’accueilALT.Net FR pour l’organisation!
  4. 4. Au menu
  5. 5. PlanPourquoi faire des tests ?Qu’est-ce qu’un test unitaire ?Pourquoi est-ce devenu trop difficile d’écriredes tests ?Comment Specflow rend les tests plus simple?Comment utiliser Specflow ?
  6. 6. Pourquoi faire des tests ? Pour écrire du code sans bugs Pour écrire du code plus simple TDD, YAGNI, KISS Pour s’assurer que le code fait bien ce qu’on veut Pour s’assurer de ne pas avoir de régressions
  7. 7. Qu’est-ce qu’un test unitaire ? On test une « boite noire » (the Unit) On fournit les données d’entré (input) On vérifie le résultat (expectations)a=1, b=1 public int Sum(int a, int b) Assert.AreEqual(2, result)
  8. 8. Qu’est-ce qu’un test unitaire ? Les données d’entré peuvent provenir des dépendances Les données de sortie peuvent être donné aux dépendances On a besoin de « mocker » les dépendances (RhinoMocks)memory=2 int LoadMemory() MemoryProvider.Stub(m => m.LoadMemory()).Return(2)a=1, b=1 public int SumWithMemory(int a, int b) Assert.AreEqual(4, result) MemoryProvider.AssertWasCalled(m => SaveMemory (Arg<int>().Is.Anything)) void SaveMemory(int result) Assert.AreEqual(4, result)
  9. 9. Pourquoi est-ce devenu trop difficile d’écrire des tests ? Beaucoup de code pour construire les données d’entré, et les résultats attendus Beaucoup de code pour construire les Mocks et vérifier les appels Plusieurs scénarios de test, mais à 90% identique: beaucoup de copier/coller Des tests de plus de 100 lignes: difficile à comprend ce qu’on test, et difficile à maintenir
  10. 10. Pourquoi est-ce devenu trop difficile d’écrire des tests ? 1 seul test 318 lignes de code Tous les tests d’une “suite” 1672 lignes de code Les tests se resemblent Beaucoup de duplication Pas assez de commentaire Difficile à lire/comprendre
  11. 11. Pourquoi est-ce devenu trop difficile d’écrire des tests ? Les Tests Unitaires: ça reste du code! Ils devraient respecter les standards de qualité (analyse Sonar) Il ne devrait pas y avoir de duplication (DRY) Ils devraient être bien documentés Ils peuvent être le une documentation/spec des fonctionnalités En lisant les tests, on comprend le code
  12. 12. Comment Specflow rend les tests plus simple ?
  13. 13. Comment Specflow rend les tests plus simple ? Ecrire des tests en Anglais Ou Français, ou Allemand, etc. (40 langages) Peuvent être écrit par le « Product Owner » Peuvent être exécuté manuellement par l’équipe de QA “Business Readable DSL”: GHERKIN Même DSL pour tous les langages BEHAT pour PHP JBehave pour JAVA Utiliser les tests comme les specs fonctionnelles Behavior Driven Development: fonctionne avec les “User Stories” (SCRUM) et YAGNI Au lieu de specs théoriques: décrit le comportement de l’application
  14. 14. Comment Specflow rend les tests plus simple ? Force les développeurs à découper le test en plusieurs étapes Rend le code plus lisible TDD: écrit le test étape par étape Rendre les étapes ré-utilisables Ne plus avoir de duplication DRY Possibilité de configurer les données d’entré et les résultats attendues Utiliser les mêmes étapes, dans une ordre différent, avec des données d’entré/sortie différentes, pour écrire de nouveaux scénarios de test
  15. 15. Comment utiliser Specflow ?Integration VisualStudio Génère des tests Nunit, mais aussi MSTest MBUnit XUnit
  16. 16. Comment utiliser Specflow ? Feature: pour décrire brièvement la fonctionnalité et l’intention In order to use MyApplication As a user I want to login into the application Scenario: pour décrire les étapes d’un scénario Successfull login / Invalid password / password expired / etc. Données d’entré : GIVEN Given I’m on the Login Page And I fill my login and password Ce qu’il faut tester : WHEN When I click the button Le résultat attendu: THEN Then I’m redirected to the Home page
  17. 17. Comment utiliser Specflow ? REGEX pour « mapper » le Gherkin avec le code du test unitaire[Given("I’m on the Login Page")]public void ImOnTheLoginPage(){ // do some stuff...} REGEX pour extraire les arguments[Given("I’m on the (.*) Page")]public void ImOnThePage(string pageName){ // use pageName} On peut utiliser des tableaux When I fill the form: [When(“I Fill the form:")] | Login | Password | public void ImOnThePage(Table formTable) | mathias.kluba | **** | { // use formTable: // formTable.Rows[0]["Login"] }
  18. 18. Comment utiliser Specflow ? On peut utiliser des @annotations pour décrire un comportement commun@seleniumScenario: Succesful Login Given Im logged in with the user mathias.kluba and the password ******* ... Utiliser le même scénario avec plusieurs jeux de donnéesScenario Outline: Process Files Given I have the file <FILENAME> When I process it Then the result should be <RESULT> Examples: | FILENAME | RESULT | | 0001.xml | OK | | 0002.xml | ERROR | Et plein d’autres fonctionnalités…
  19. 19. Comment utiliser Specflow ?Pour des « User Acceptance Tests »Peuvent être « exécutés » manuellementPour des tests d’interfaces avec Selenium avecl’annotation @selenium @selenium Scenario: Succesful Login Given I am in the login page And I enter the user information | Login | Password | | mathias.kluba | anything | When I press LOG IN button Then I go to a Home page And I have in the menu the text "Welcome Mathias KLUBA"
  20. 20. Comment utiliser Specflow ?Pour de pures « Tests unitaires »Plus facile à écrirePlus facile à lirePlus facile à comprendre l’erreur si le test échoue
  21. 21. Comment utiliser Specflow ? Pur des tests de « données » (DAL) Avec l’annotation @database@databaseScenario: Find the user by ID Given I have an instance of UserRepository And I have the data in the table ”APP_Users": | Id | Firstname | Lastname | | 14 | Mathias | Kluba | | 15 | Michel | Kluba | When I call the FindByCriteria method with the UserId: 2 Then the result should be: | Id | Firstname | Lastname | | 2 | Mathias | Kluba |
  22. 22. Et les concurrents?GreenPepper?Fitness?Nécessite un “wiki” pour rédiger les scénariosNécessite un “runner” pour exécuter les scénarios du wikiPas d’intégration VisualStudio
  23. 23. LiensSpecflow http://specflow.org/Gherkin https://github.com/aslakhellesoy/cucumber/wiki/gherkinMartin Fowler: Business Readable DSL http://martinfowler.com/bliki/BusinessReadableDSL.htmlJBehave http://jbehave.org/reference/stable/getting-started.htmlBehat http://everzet.com/Behat/
  24. 24. LiensUn très bon lien expliquant le BDD http://www.arolla.fr/blog/2012/06/bdd-c-est-quoi-donc/Démo sur Github https://github.com/grozeille/PricerTuto
  25. 25. DesQuestions ?
  26. 26. Merci !

×