SlideShare une entreprise Scribd logo
1  sur  26
Site    : www.altnetfr.org
Twitter : @altnetfr et #altnetfr


Propositions de sessions:
sessions@altnetfr.org
BDD, TDD
& Specflow
Mathias Kluba
Twitter: @mathiaskluba
Remerciements
OCTO pour l’accueil

ALT.Net FR pour l’organisation!
Au menu
Plan
Pourquoi faire des tests ?

Qu’est-ce qu’un test unitaire ?

Pourquoi est-ce devenu trop difficile d’écrire
des tests ?

Comment Specflow rend les tests plus simple
?

Comment utiliser Specflow ?
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
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)
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)
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
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
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
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 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
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
Comment utiliser Specflow ?
Integration VisualStudio   Génère des tests Nunit, mais aussi
                               MSTest
                               MBUnit
                               XUnit
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
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"]
                                           }
Comment utiliser Specflow ?
    On peut utiliser des @annotations pour décrire un
    comportement commun
@selenium
Scenario: Succesful Login
    Given I'm logged in with the user mathias.kluba and the password *******
    ...



     Utiliser le même scénario avec plusieurs jeux de données
Scenario 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…
Comment utiliser Specflow ?
Pour des « User Acceptance Tests »

Peuvent être « exécutés » manuellement

Pour des tests d’interfaces avec Selenium avec
l’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"
Comment utiliser Specflow ?
Pour de pures « Tests unitaires »

Plus facile à écrire

Plus facile à lire

Plus facile à comprendre l’erreur si le test échoue
Comment utiliser Specflow ?
   Pur des tests de « données » (DAL)

   Avec l’annotation @database
@database
Scenario: 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    |
Et les concurrents?
GreenPepper?

Fitness?

Nécessite un “wiki” pour rédiger les scénarios

Nécessite un “runner” pour exécuter les scénarios du wiki

Pas d’intégration VisualStudio
Liens
Specflow
   http://specflow.org/

Gherkin
  https://github.com/aslakhellesoy/cucumber/wiki/gherkin

Martin Fowler: Business Readable DSL
   http://martinfowler.com/bliki/BusinessReadableDSL.html

JBehave
   http://jbehave.org/reference/stable/getting-started.html

Behat
   http://everzet.com/Behat/
Liens
Un 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
Des
Questions ?
Merci !

Contenu connexe

Tendances

Jasmine : tests unitaires en JavaScript - Human Talks Grenoble 14.05.2013
Jasmine : tests unitaires en JavaScript - Human Talks Grenoble 14.05.2013Jasmine : tests unitaires en JavaScript - Human Talks Grenoble 14.05.2013
Jasmine : tests unitaires en JavaScript - Human Talks Grenoble 14.05.2013Xavier NOPRE
 
Presentation Symfony
Presentation SymfonyPresentation Symfony
Presentation SymfonyJeremy Gachet
 
Workshop Spring - Session 5 - Spring Integration
Workshop Spring - Session 5 - Spring IntegrationWorkshop Spring - Session 5 - Spring Integration
Workshop Spring - Session 5 - Spring IntegrationAntoine Rey
 
Orchestrez vos projets Symfony sans fausses notes
Orchestrez vos projets Symfony sans fausses notesOrchestrez vos projets Symfony sans fausses notes
Orchestrez vos projets Symfony sans fausses notesXavier Gorse
 
Introduction au langage PHP (1ere partie) élaborée par Marouan OMEZZINE
Introduction au langage PHP (1ere partie) élaborée par Marouan OMEZZINEIntroduction au langage PHP (1ere partie) élaborée par Marouan OMEZZINE
Introduction au langage PHP (1ere partie) élaborée par Marouan OMEZZINEMarouan OMEZZINE
 
Migration PHP4-PHP5
Migration PHP4-PHP5Migration PHP4-PHP5
Migration PHP4-PHP5julien pauli
 
Audit openERP 7.0: Mise en place &Optimisation de Performances
Audit openERP 7.0: Mise en place &Optimisation de Performances Audit openERP 7.0: Mise en place &Optimisation de Performances
Audit openERP 7.0: Mise en place &Optimisation de Performances Firas Kouẞàa
 
ZendFramework2 - Présentation
ZendFramework2 - PrésentationZendFramework2 - Présentation
ZendFramework2 - Présentationjulien pauli
 
Presentation Symfony2
Presentation Symfony2Presentation Symfony2
Presentation Symfony2Ahmed ABATAL
 
20111006 bonnes pratiques-gi_g_v1
20111006 bonnes pratiques-gi_g_v120111006 bonnes pratiques-gi_g_v1
20111006 bonnes pratiques-gi_g_v1Gilles Guirand
 

Tendances (14)

Jasmine : tests unitaires en JavaScript - Human Talks Grenoble 14.05.2013
Jasmine : tests unitaires en JavaScript - Human Talks Grenoble 14.05.2013Jasmine : tests unitaires en JavaScript - Human Talks Grenoble 14.05.2013
Jasmine : tests unitaires en JavaScript - Human Talks Grenoble 14.05.2013
 
Presentation Symfony
Presentation SymfonyPresentation Symfony
Presentation Symfony
 
Workshop Spring - Session 5 - Spring Integration
Workshop Spring - Session 5 - Spring IntegrationWorkshop Spring - Session 5 - Spring Integration
Workshop Spring - Session 5 - Spring Integration
 
Spring 3.0
Spring 3.0Spring 3.0
Spring 3.0
 
Orchestrez vos projets Symfony sans fausses notes
Orchestrez vos projets Symfony sans fausses notesOrchestrez vos projets Symfony sans fausses notes
Orchestrez vos projets Symfony sans fausses notes
 
Apache ANT
Apache ANTApache ANT
Apache ANT
 
Introduction au langage PHP (1ere partie) élaborée par Marouan OMEZZINE
Introduction au langage PHP (1ere partie) élaborée par Marouan OMEZZINEIntroduction au langage PHP (1ere partie) élaborée par Marouan OMEZZINE
Introduction au langage PHP (1ere partie) élaborée par Marouan OMEZZINE
 
Migration PHP4-PHP5
Migration PHP4-PHP5Migration PHP4-PHP5
Migration PHP4-PHP5
 
Symfony Best Practices
Symfony Best PracticesSymfony Best Practices
Symfony Best Practices
 
Audit openERP 7.0: Mise en place &Optimisation de Performances
Audit openERP 7.0: Mise en place &Optimisation de Performances Audit openERP 7.0: Mise en place &Optimisation de Performances
Audit openERP 7.0: Mise en place &Optimisation de Performances
 
ZendFramework2 - Présentation
ZendFramework2 - PrésentationZendFramework2 - Présentation
ZendFramework2 - Présentation
 
Nouveautés php 7
Nouveautés php 7Nouveautés php 7
Nouveautés php 7
 
Presentation Symfony2
Presentation Symfony2Presentation Symfony2
Presentation Symfony2
 
20111006 bonnes pratiques-gi_g_v1
20111006 bonnes pratiques-gi_g_v120111006 bonnes pratiques-gi_g_v1
20111006 bonnes pratiques-gi_g_v1
 

En vedette

Totemly awesome
Totemly awesomeTotemly awesome
Totemly awesomeclunch
 
Hta chez l'adulte jeune dr berkane
Hta chez l'adulte jeune dr berkaneHta chez l'adulte jeune dr berkane
Hta chez l'adulte jeune dr berkaneMustapha Benbraham
 
French_Resumé-GD_2015
French_Resumé-GD_2015French_Resumé-GD_2015
French_Resumé-GD_2015Gloria Díaz
 
Universidad autónoma de aguascalientes
Universidad autónoma de aguascalientesUniversidad autónoma de aguascalientes
Universidad autónoma de aguascalientesAdileneRega1903
 
LE VIN 2.0 '11 - Atelier 02 Intervenant 03 - "m-commerce (le e-commerce en mo...
LE VIN 2.0 '11 - Atelier 02 Intervenant 03 - "m-commerce (le e-commerce en mo...LE VIN 2.0 '11 - Atelier 02 Intervenant 03 - "m-commerce (le e-commerce en mo...
LE VIN 2.0 '11 - Atelier 02 Intervenant 03 - "m-commerce (le e-commerce en mo...Vinternet
 
Questionari aptituds
Questionari aptitudsQuestionari aptituds
Questionari aptitudsInma López
 
Cooperativismo en Tucuman Juri Debbo
Cooperativismo en Tucuman Juri DebboCooperativismo en Tucuman Juri Debbo
Cooperativismo en Tucuman Juri Debbofmmeson
 
Contenido multimedia en blogger
Contenido multimedia en bloggerContenido multimedia en blogger
Contenido multimedia en bloggerCarlos Ollero
 
4Life Research[1]
4Life Research[1]4Life Research[1]
4Life Research[1]peru4life
 
Travail De Portugais..Pris
Travail De Portugais..PrisTravail De Portugais..Pris
Travail De Portugais..Prisguestbd69fb
 
Guion Hipermedia de Amodeo sujatovich tunez
Guion Hipermedia de Amodeo sujatovich tunezGuion Hipermedia de Amodeo sujatovich tunez
Guion Hipermedia de Amodeo sujatovich tunezalehgonzalez
 
Restaurant-Paris-boulogne-bar-brasserie
Restaurant-Paris-boulogne-bar-brasserieRestaurant-Paris-boulogne-bar-brasserie
Restaurant-Paris-boulogne-bar-brasserieakaernest
 
05 Une Question De Mecanique
05 Une Question De Mecanique05 Une Question De Mecanique
05 Une Question De Mecaniqueguestbd69fb
 
REVISTEL 2.0: base de dades de revistes de la Biblioteca del campus Sesce...
REVISTEL 2.0: base de dades de revistes  de  la  Biblioteca  del campus Sesce...REVISTEL 2.0: base de dades de revistes  de  la  Biblioteca  del campus Sesce...
REVISTEL 2.0: base de dades de revistes de la Biblioteca del campus Sesce...joseluis.gonzalez
 

En vedette (20)

Totemly awesome
Totemly awesomeTotemly awesome
Totemly awesome
 
Act2_APCR
Act2_APCRAct2_APCR
Act2_APCR
 
Hta chez l'adulte jeune dr berkane
Hta chez l'adulte jeune dr berkaneHta chez l'adulte jeune dr berkane
Hta chez l'adulte jeune dr berkane
 
French_Resumé-GD_2015
French_Resumé-GD_2015French_Resumé-GD_2015
French_Resumé-GD_2015
 
Universidad autónoma de aguascalientes
Universidad autónoma de aguascalientesUniversidad autónoma de aguascalientes
Universidad autónoma de aguascalientes
 
Laeradigital
LaeradigitalLaeradigital
Laeradigital
 
Software Educativo
Software EducativoSoftware Educativo
Software Educativo
 
Meurtrejardin
MeurtrejardinMeurtrejardin
Meurtrejardin
 
LE VIN 2.0 '11 - Atelier 02 Intervenant 03 - "m-commerce (le e-commerce en mo...
LE VIN 2.0 '11 - Atelier 02 Intervenant 03 - "m-commerce (le e-commerce en mo...LE VIN 2.0 '11 - Atelier 02 Intervenant 03 - "m-commerce (le e-commerce en mo...
LE VIN 2.0 '11 - Atelier 02 Intervenant 03 - "m-commerce (le e-commerce en mo...
 
Questionari aptituds
Questionari aptitudsQuestionari aptituds
Questionari aptituds
 
Mon Dieu
Mon DieuMon Dieu
Mon Dieu
 
Cooperativismo en Tucuman Juri Debbo
Cooperativismo en Tucuman Juri DebboCooperativismo en Tucuman Juri Debbo
Cooperativismo en Tucuman Juri Debbo
 
Contenido multimedia en blogger
Contenido multimedia en bloggerContenido multimedia en blogger
Contenido multimedia en blogger
 
4Life Research[1]
4Life Research[1]4Life Research[1]
4Life Research[1]
 
Travail De Portugais..Pris
Travail De Portugais..PrisTravail De Portugais..Pris
Travail De Portugais..Pris
 
Guion Hipermedia de Amodeo sujatovich tunez
Guion Hipermedia de Amodeo sujatovich tunezGuion Hipermedia de Amodeo sujatovich tunez
Guion Hipermedia de Amodeo sujatovich tunez
 
Restaurant-Paris-boulogne-bar-brasserie
Restaurant-Paris-boulogne-bar-brasserieRestaurant-Paris-boulogne-bar-brasserie
Restaurant-Paris-boulogne-bar-brasserie
 
05 Une Question De Mecanique
05 Une Question De Mecanique05 Une Question De Mecanique
05 Une Question De Mecanique
 
REVISTEL 2.0: base de dades de revistes de la Biblioteca del campus Sesce...
REVISTEL 2.0: base de dades de revistes  de  la  Biblioteca  del campus Sesce...REVISTEL 2.0: base de dades de revistes  de  la  Biblioteca  del campus Sesce...
REVISTEL 2.0: base de dades de revistes de la Biblioteca del campus Sesce...
 
Open Innovation
Open InnovationOpen Innovation
Open Innovation
 

Similaire à ALT.Net Juin 2012 - Specflow

La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !
La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !
La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !Paris Salesforce Developer Group
 
Formation Extreme Programming, Tests unitaires, travail collaboratif
Formation Extreme Programming, Tests unitaires, travail collaboratifFormation Extreme Programming, Tests unitaires, travail collaboratif
Formation Extreme Programming, Tests unitaires, travail collaboratifkemenaran
 
Industrialisez vos projets Php
Industrialisez vos projets Php Industrialisez vos projets Php
Industrialisez vos projets Php ALTER WAY
 
RefCard Tests sur tous les fronts
RefCard Tests sur tous les frontsRefCard Tests sur tous les fronts
RefCard Tests sur tous les frontsOCTO Technology
 
Octo RefCard test front-end
Octo RefCard test front-endOcto RefCard test front-end
Octo RefCard test front-endClément Dubois
 
Octo Technology - Refcard Tests Web front-end
Octo Technology - Refcard Tests Web front-endOcto Technology - Refcard Tests Web front-end
Octo Technology - Refcard Tests Web front-endFrançois Petitit
 
Découverte du moteur de rendu du projet Spartan
Découverte du moteur de rendu du projet SpartanDécouverte du moteur de rendu du projet Spartan
Découverte du moteur de rendu du projet SpartanMicrosoft
 
Presentation Spring, Spring MVC
Presentation Spring, Spring MVCPresentation Spring, Spring MVC
Presentation Spring, Spring MVCNathaniel Richand
 
Automatisation des tests - objectifs et concepts - partie 2
Automatisation des tests  - objectifs et concepts - partie 2Automatisation des tests  - objectifs et concepts - partie 2
Automatisation des tests - objectifs et concepts - partie 2Christophe Rochefolle
 
PyConFR - testons en python
PyConFR - testons en pythonPyConFR - testons en python
PyConFR - testons en pythongburet
 
Formation Efficy CRM - Technical training
Formation Efficy CRM - Technical trainingFormation Efficy CRM - Technical training
Formation Efficy CRM - Technical trainingEfficy CRM
 
Paris Web 2015 - Atelier désendettement Javascript legacy
Paris Web 2015 - Atelier désendettement Javascript legacyParis Web 2015 - Atelier désendettement Javascript legacy
Paris Web 2015 - Atelier désendettement Javascript legacyFrançois Petitit
 
Retour d'expérience TAA - 2011/03/29
Retour d'expérience TAA - 2011/03/29Retour d'expérience TAA - 2011/03/29
Retour d'expérience TAA - 2011/03/29Elapse Technologies
 
Big Data Viz (and much more!) with Apache Zeppelin
Big Data Viz (and much more!) with Apache ZeppelinBig Data Viz (and much more!) with Apache Zeppelin
Big Data Viz (and much more!) with Apache ZeppelinBruno Bonnin
 
Développement de plug in sous eclipse
Développement de plug in sous eclipseDéveloppement de plug in sous eclipse
Développement de plug in sous eclipseISIG
 
TypeScript for dummies
TypeScript for dummiesTypeScript for dummies
TypeScript for dummiesMicrosoft
 
Performance et optimisation de PrestaShop
Performance et optimisation de PrestaShopPerformance et optimisation de PrestaShop
Performance et optimisation de PrestaShopPrestaShop
 
Alphorm.com Formation Windows Server 2016 : Installation et Configuration
Alphorm.com Formation Windows Server 2016 : Installation et ConfigurationAlphorm.com Formation Windows Server 2016 : Installation et Configuration
Alphorm.com Formation Windows Server 2016 : Installation et ConfigurationAlphorm
 

Similaire à ALT.Net Juin 2012 - Specflow (20)

La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !
La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !
La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !
 
Anatomie du test
Anatomie du testAnatomie du test
Anatomie du test
 
Formation Extreme Programming, Tests unitaires, travail collaboratif
Formation Extreme Programming, Tests unitaires, travail collaboratifFormation Extreme Programming, Tests unitaires, travail collaboratif
Formation Extreme Programming, Tests unitaires, travail collaboratif
 
Industrialisez vos projets Php
Industrialisez vos projets Php Industrialisez vos projets Php
Industrialisez vos projets Php
 
RefCard Tests sur tous les fronts
RefCard Tests sur tous les frontsRefCard Tests sur tous les fronts
RefCard Tests sur tous les fronts
 
Octo RefCard test front-end
Octo RefCard test front-endOcto RefCard test front-end
Octo RefCard test front-end
 
Octo Technology - Refcard Tests Web front-end
Octo Technology - Refcard Tests Web front-endOcto Technology - Refcard Tests Web front-end
Octo Technology - Refcard Tests Web front-end
 
Découverte du moteur de rendu du projet Spartan
Découverte du moteur de rendu du projet SpartanDécouverte du moteur de rendu du projet Spartan
Découverte du moteur de rendu du projet Spartan
 
Presentation Spring, Spring MVC
Presentation Spring, Spring MVCPresentation Spring, Spring MVC
Presentation Spring, Spring MVC
 
Automatisation des tests - objectifs et concepts - partie 2
Automatisation des tests  - objectifs et concepts - partie 2Automatisation des tests  - objectifs et concepts - partie 2
Automatisation des tests - objectifs et concepts - partie 2
 
Salesforce Tooling API
Salesforce Tooling APISalesforce Tooling API
Salesforce Tooling API
 
PyConFR - testons en python
PyConFR - testons en pythonPyConFR - testons en python
PyConFR - testons en python
 
Formation Efficy CRM - Technical training
Formation Efficy CRM - Technical trainingFormation Efficy CRM - Technical training
Formation Efficy CRM - Technical training
 
Paris Web 2015 - Atelier désendettement Javascript legacy
Paris Web 2015 - Atelier désendettement Javascript legacyParis Web 2015 - Atelier désendettement Javascript legacy
Paris Web 2015 - Atelier désendettement Javascript legacy
 
Retour d'expérience TAA - 2011/03/29
Retour d'expérience TAA - 2011/03/29Retour d'expérience TAA - 2011/03/29
Retour d'expérience TAA - 2011/03/29
 
Big Data Viz (and much more!) with Apache Zeppelin
Big Data Viz (and much more!) with Apache ZeppelinBig Data Viz (and much more!) with Apache Zeppelin
Big Data Viz (and much more!) with Apache Zeppelin
 
Développement de plug in sous eclipse
Développement de plug in sous eclipseDéveloppement de plug in sous eclipse
Développement de plug in sous eclipse
 
TypeScript for dummies
TypeScript for dummiesTypeScript for dummies
TypeScript for dummies
 
Performance et optimisation de PrestaShop
Performance et optimisation de PrestaShopPerformance et optimisation de PrestaShop
Performance et optimisation de PrestaShop
 
Alphorm.com Formation Windows Server 2016 : Installation et Configuration
Alphorm.com Formation Windows Server 2016 : Installation et ConfigurationAlphorm.com Formation Windows Server 2016 : Installation et Configuration
Alphorm.com Formation Windows Server 2016 : Installation et Configuration
 

Plus de Mathias Kluba

Future Of Data Paris - BI and Big Data
Future Of Data Paris - BI and Big DataFuture Of Data Paris - BI and Big Data
Future Of Data Paris - BI and Big DataMathias Kluba
 
Analytics et Big Data, une histoire de cubes...
Analytics et Big Data, une histoire de cubes...Analytics et Big Data, une histoire de cubes...
Analytics et Big Data, une histoire de cubes...Mathias Kluba
 
Soutenance Stage Licence
Soutenance Stage LicenceSoutenance Stage Licence
Soutenance Stage LicenceMathias Kluba
 

Plus de Mathias Kluba (6)

Future Of Data Paris - BI and Big Data
Future Of Data Paris - BI and Big DataFuture Of Data Paris - BI and Big Data
Future Of Data Paris - BI and Big Data
 
Analytics et Big Data, une histoire de cubes...
Analytics et Big Data, une histoire de cubes...Analytics et Big Data, une histoire de cubes...
Analytics et Big Data, une histoire de cubes...
 
Soutenance Stage Licence
Soutenance Stage LicenceSoutenance Stage Licence
Soutenance Stage Licence
 
Hands on Sonar
Hands on SonarHands on Sonar
Hands on Sonar
 
Alt.net spring.net
Alt.net spring.netAlt.net spring.net
Alt.net spring.net
 
Alt.net spring.net
Alt.net spring.netAlt.net spring.net
Alt.net spring.net
 

ALT.Net Juin 2012 - Specflow

  • 1. Site : www.altnetfr.org Twitter : @altnetfr et #altnetfr Propositions de sessions: sessions@altnetfr.org
  • 2. BDD, TDD & Specflow Mathias Kluba Twitter: @mathiaskluba
  • 5. Plan Pourquoi faire des tests ? Qu’est-ce qu’un test unitaire ? Pourquoi est-ce devenu trop difficile d’écrire des tests ? Comment Specflow rend les tests plus simple ? Comment utiliser Specflow ?
  • 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. 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. 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. 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. 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. 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. Comment Specflow rend les tests plus simple ?
  • 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. 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. Comment utiliser Specflow ? Integration VisualStudio Génère des tests Nunit, mais aussi MSTest MBUnit XUnit
  • 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. 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. Comment utiliser Specflow ? On peut utiliser des @annotations pour décrire un comportement commun @selenium Scenario: Succesful Login Given I'm logged in with the user mathias.kluba and the password ******* ... Utiliser le même scénario avec plusieurs jeux de données Scenario 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. Comment utiliser Specflow ? Pour des « User Acceptance Tests » Peuvent être « exécutés » manuellement Pour des tests d’interfaces avec Selenium avec l’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. Comment utiliser Specflow ? Pour de pures « Tests unitaires » Plus facile à écrire Plus facile à lire Plus facile à comprendre l’erreur si le test échoue
  • 21. Comment utiliser Specflow ? Pur des tests de « données » (DAL) Avec l’annotation @database @database Scenario: 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. Et les concurrents? GreenPepper? Fitness? Nécessite un “wiki” pour rédiger les scénarios Nécessite un “runner” pour exécuter les scénarios du wiki Pas d’intégration VisualStudio
  • 23. Liens Specflow http://specflow.org/ Gherkin https://github.com/aslakhellesoy/cucumber/wiki/gherkin Martin Fowler: Business Readable DSL http://martinfowler.com/bliki/BusinessReadableDSL.html JBehave http://jbehave.org/reference/stable/getting-started.html Behat http://everzet.com/Behat/
  • 24. Liens Un 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