1 / 19

JUnit

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

Download Presentation

JUnit

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. JUnit

  2. Plan • Généralités sur le test • Présentation de Junit • Présentation du framework • Codage • TestRunner • Situation de JUnit

  3. Le test • Problématique • Types d’erreurs • Place du test dans le cycle de développement • Techniques de test • Outils de test

  4. 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

  5. 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

  6. Junit:Framework • Le source d’un framework est disponible • Ne s’utilise pas directement: il se spécialise Ex: 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.

  7. composite template Junit:Framework

  8. 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

  9. 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); } … }

  10. Codage (2/6) • Codage d’un « TestCase »: • déclaration de la classe: public class MoneyTest extends TestCase { //délaration des instances private Money f14CHF; private MoneyBag fMB1; ... //contructeur public TestedClassTest(String name){ super(Name); } //setUp() et tearDown() //méthodes de test //création d’une suite de test //méthode main() }

  11. Codage (3/6) • la méthode setUp: • la méthode tearDown: protected void setUp() { //appellée avant chaque méthode de test f12CHF= new Money(12, "CHF"); fMB1= new MoneyBag(f12CHF, f7USD); …} protected void tearDown { //appellée après chaque méthode de test f12CHF = null; ... ... }

  12. Codage (4/6) • les méthodes de test: • caractéristiques: • nom préfixé par « test » • contient une assertion public 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)); } …

  13. 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); }

  14. 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) }

  15. 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); }

  16. TestRunner • L’interface du TestRunner

  17. 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

  18. Evolution • Version 3.5 • Généralisation des concepts (JXUnit…) • Philosophie Xprogramming (xprogramming.com): • importance des test • outils de tests indispensables

  19. import junit.framework.TestCase; import junit.framework.TestSuite; publicclass ExempleTest extends TestCase { public ExempleTest(String name) { super(name); } protectedvoid setUp() { exemple = new Exemple(); } protectedvoid tearDown() { exemple = null; } publicvoid testExemple() { assert(exemple.getLastResult() == 0); } publicvoid testFactoriel() { exemple.factoriel(4); assert(exemple.getLastResult() == 24);} private Exemple exemple; …} class Exemple { protectedint lastResult; publicint getLastResult() { return lastResult;} publicvoid factoriel(int n) { int Result; Result = 1; for (int i=1;i<=n;i++) Result = Result * i; lastResult = Result;} publicvoid min(int a, int b) { if (a>b) lastResult = b; else lastResult = a;} …}

More Related