junit

19
JUnit

Upload: saleema-soroush

Post on 30-Dec-2015

36 views

Category:

Documents


1 download

DESCRIPTION

JUnit. Plan. Généralités sur le test Présentation de Junit Présentation du framework Codage TestRunner Situation de JUnit. Le test. Problématique Types d’erreurs Place du test dans le cycle de développement Techniques de test Outils de test. Présentation. Origine - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: JUnit

JUnit

Page 2: JUnit

Plan

• Généralités sur le test

• Présentation de Junit

• Présentation du framework

• Codage

• TestRunner

• Situation de JUnit

Page 3: JUnit

Le test

• Problématique

• Types d’erreurs

• Place du test dans le cycle de développement

• Techniques de test

• Outils de test

Page 4: JUnit

Présentation

• Origine– framework de test écrit en Java par E. Gamma

et K. Beck– open source: www.junit.org – version 3.5

• Objectifs– test des applications Java– faciliter la création des tests– tests de non régression

Page 5: JUnit

Junit:Framework

Un framework est un ensemble de classes et de collaborations entre les instances de ces classes.

http://st-www.cs.uiuc.edu/users/johnson/frameworks.html

Page 6: JUnit

Junit:Framework

• Le source d’un framework est disponible

• Ne s’utilise pas directement: il se spécialiseEx: pour créer un cas de test on hérite de la classe

TestCase

Un framework peut être vu comme un programme à « trous » qui offre la partie commune des traitements et chaque utilisateur le spécialise pour son cas particulier.

Page 7: JUnit

Junit:Framework

template

composite

AssertAssertionFailedError <<interface>>Test

TestCase

TestFailure

TestSuiteTestResult

<<interface>>TestListener

setUp();runTest();tearDown();

+fFailures *

+fListeners*

-fName : string

+countTestCases():integer

-fName : string+runBare()#runTest()#setUp()#tearDown()

+run(Inout p0:TestResult)

+run(Inout result:TestResult)

+run(Inout result:TestResult)

0..1#fFailedTest

+fTests

*

Page 8: JUnit

Codage (1/6)

• Organisation du code des tests– cas de Test: TestCase

• setUp() et tearDown()• les méthodes de test

– suite de Test: TestSuite• Méthodes de test• Cas de test• Suite de Test

• Lancement des tests– le TestRunner– non régression

Page 9: JUnit

Exemple:une classe Money

public class Money implements IMoney {private int fAmount;private String fCurrency;

public Money(int amount, String currency) {fAmount= amount;fCurrency= currency;

}

/* Adds a money to this money. Forwards the request to the addMoney helper.*/

public IMoney add(IMoney m) {return m.addMoney(this);

}…

}

Page 10: JUnit

Codage (2/6)

• Codage d’un « TestCase »:– déclaration de la classe:public class MoneyTest extends TestCase {

//délaration des instancesprivate Money f14CHF;private MoneyBag fMB1;...//contructeurpublic TestedClassTest(String name){

super(Name); }//setUp() et tearDown()//méthodes de test//création d’une suite de test//méthode main()

}

Page 11: JUnit

Codage (3/6)- la méthode setUp:

- la méthode tearDown:

protected void setUp() {//appellée avant chaque méthode de testf12CHF= new Money(12, "CHF");fMB1= new MoneyBag(f12CHF, f7USD);

…}

protected void tearDown {//appellée après chaque méthode de testf12CHF = null;......

}

Page 12: JUnit

Codage (4/6)- les méthodes de test:

- caractéristiques:- nom préfixé par « test »- contient une assertionpublic void testBagSimpleAdd() {// {[12 CHF][7 USD]} + [14 CHF] == {[26 CHF][7 USD]}Money bag[]= {new Money(26, "CHF"), new Money(7, "USD")};MoneyBag expected= new MoneyBag(bag);assertEquals(expected, fMB1.add(f14CHF));

}…

Page 13: JUnit

Codage (5/6)- regroupement des méthodes de test:

- la fonction main: public static Test suite() { TestSuite suite =

new TestSuite(MoneyTest.class); return suite;}

public static void main() {junit.awtui.TestRunner.run(MoneyTest.class);

}

Page 14: JUnit

Codage (6/6)

• Codage d’une « TestSuite »:– déclaration de la suite:

– création d’une suite de test:

– fonction main() identique à celle d’un TestCase

public class MaTestSuite extends TestCase {//...

}

public static Test suite {TestSuite suite = new TestSuite();suite.addTest(newTestedClass(“testBagSimpleAdd”);suite.addTest(MoneyTest.suite());suite.addTestSuite(MoneyTest.class)

}

Page 15: JUnit

Détail d’implémentation

• Pour exécuter une suite de tests, Junit peut utiliser l’introspection

public TestSuite (final Class theClass){…Method[] = theClass.getDeclaredMethods…

}private boolean isTestMethod(Method m) {

String name= m.getName();Class[] parameters= m.getParameterTypes();Class returnType= m.getReturnType();return parameters.length == 0 &&

name.startsWith("test") && returnType.equals(Void.TYPE); }

Page 16: JUnit

TestRunner

• L’interface du TestRunner

Page 17: JUnit

Situation

• www.junit.org– Rq pratique: ajouter la localisation l’archive .jar

dans CLASSPATH

• Avantages– gratuit– simple– intégré à plusieurs IDE(Kawa, VisualAge…)

• Inconvénients– documentation– exploitation des résultats

Page 18: JUnit

Evolution

• Version 3.5

• Généralisation des concepts (JXUnit…)

• Philosophie Xprogramming (xprogramming.com):– importance des test– outils de tests indispensables

Page 19: JUnit

import junit.framework.TestCase;

import junit.framework.TestSuite;

public class ExempleTest extends TestCase

{

public ExempleTest(String name) {

super(name); }

protected void setUp() {

exemple = new Exemple(); }

protected void tearDown() {

exemple = null; }

public void testExemple() {

assert(exemple.getLastResult() == 0); }

public void testFactoriel() {

exemple.factoriel(4);

assert(exemple.getLastResult() == 24); }

private Exemple exemple;

…}

class Exemple {

protected int lastResult;

public int getLastResult() {

return lastResult;}

public void factoriel(int n) {

int Result;

Result = 1;

for (int i=1;i<=n;i++)

Result = Result * i;

lastResult = Result;}

public void min(int a, int b) {

if (a>b) lastResult = b;

else lastResult = a;}

…}