Test Driven Development

Ce que c'est et ce que ce n'est pas

Par Bastien DURAND

Introduction

De quels tests parlons nous?

test

beta test

performance test

stress test

test d'integration

test de non régrétion

Le TDD c'est quoi ?

Tests unitaires - mais pas TDD

Étape 1 : écrire la logique


public function calculateLoan(
    $amount, $months, $interestRate)
{
    // ... some code
    // ...
}

Étape 2 : écrire le(s) test(s)


calculateLoan(20000, 60, 5.0);
// is result 382.02?

calculateLoan(6000, 12, 10.0);
// is result 527.50?

Test-Driven Development

Étape 1 : écrire les tests en premier



calculateLoan(20000, 60, 5.0);
// is result 382.02?

calculateLoan(6000, 12, 10.0);
// is result 527.50?

Étape 2 : écrire la logique


public function calculateLoan(
    $amount, $months, $interestRate)
{
    // ... some code
    // ...
}

Questions et préoccupations

“Le TDD s'applique-t-il à tout?”
“Dois-je écrire tous mes tests en premier ?”
“Nous avons des testeurs, doivent-ils écrire ces tests ?”

Pour commencer

Les frameworks de tests unitaires


class Tester {
    //example
    MyClass obj = new MyClass();
    int result = obj.someMethod();
    if ( result > 50 ) {
        log("success!");
    } else {
        log("test failed!");
    }
}

                    
phpunit homepage
phpunit homepage
phpunit homepage

SUnit
Smalltalk

JUnit
Java

NUnit
.Net

CppUnit
C++

OCUnit
Objective-C

PHPUnit
PHP

(etc...)

SUnit
Smalltalk

JUnit
Java

NUnit
.Net

CppUnit
C++

OCUnit
Objective-C

PHPUnit
PHP

(etc...)

xUnit frameworks

Comprendre les assertions

Assertions JUnit framework

assertEquals(arg1, arg2);
        assertEquals(1, 1); //pass do nothing
        assertEquals(1, 2); //fail, error
assertArrayEquals(array1, array2);
assertNotNull(obj1);
assertNull(obj1);
assertSame(obj1, obj2);
assertTrue(condition);
assertFalse(condition);

Créer un test

blank-page
bankAccount UML diagram

Travailler avec les tests

Le processus du TDD

TDD en détail

  1. Écrire un test
  2. Regarder le test planter
  3. Écrire le code logique, aussi simple que possible
  4. Passer le test
  5. Refactoriser le code
  6. Passer de nouveau le test

Ajout de tests et suppression de la duplication

Demo

Recommandations et conclusion