JUnit

powersmoneyΛογισμικό & κατασκευή λογ/κού

14 Ιουλ 2012 (πριν από 4 χρόνια και 9 μήνες)

493 εμφανίσεις

P. Grafion/ Junitv1.4
1
JUnit3.8 / JUnit4
JUnit
JUnit
3.8 /
3.8 /
JUnit
JUnit
4
4
P. Grafion/ Junitv1.4
2
Objectifs
Objectifs
Objectifs
Framework
Framework
de tests écrit pour faciliter :
de tests écrit pour faciliter :


l’écriture de tests
l’écriture de tests


tests unitaires
tests unitaires


tests de recette
tests de recette


l’exécution de ces tests
l’exécution de ces tests


l’exploitation de ces tests
l’exploitation de ces tests
P. Grafion/ Junitv1.4
3
Origine
Origine
Origine


programmation pilotée par les tests
programmation pilotée par les tests
(
(
Test
Test
-
-
Driven
Driven
Development
Development
)
)


Framework
Framework
écrit en Java par :
écrit en Java par :


Kent Beck (
Kent Beck (
Extreme
Extreme
programming
programming
)
)


Erich Gamma (Design patterns)
Erich Gamma (Design patterns)


Désormais décliné dans tous les langages!
Désormais décliné dans tous les langages!


www.junit.org
www.junit.org
P. Grafion/ Junitv1.4
4
JUnit3.8
JUnit
JUnit
3.8
3.8
http://
http://
junit.sourceforge.net
junit.sourceforge.net
/junit3.8.1/doc
/junit3.8.1/doc
http://
http://
junit.sourceforge.net
junit.sourceforge.net
/junit3.8.1/
/junit3.8.1/
javadoc
javadoc
P. Grafion/ Junitv1.4
5
TestCase
TestCase
TestCase
Ecrire
Ecrire
une classe de test consiste à :
une classe de test consiste à :


hériter de la classe
hériter de la classe
TestCase
TestCase


implémenter plusieurs méthodes
implémenter plusieurs méthodes
nommées test<f>()
nommées test<f>()


écrire des assertions :
écrire des assertions :


assertTrue
assertTrue
(1 > 0)
(1 > 0)


assertEquals
assertEquals
(7, 3+4)
(7, 3+4)
MyTestCase
+ testFunction1()
+ testFunction2()
TestCase
Assert
+ assertEquals()
+ assertNotNull()
+ assertNull()
+ assertSame()
+ assertTrue()
P. Grafion/ Junitv1.4
6
Premier exemple
Premier exemple
Premier exemple
Calculette
+ add(int, int)
+ multiply(int, int)
TestCase
CalculetteTest
+ testAdd()
+ testMultiply()
import junit.framework.TestCase;
public class CalculetteTestextendsTestCase
{
public voidtestAdd() {
Calculettec = new Calculette();
intexpected= 7;
intactual= c.add(3, 4);
assertEquals(expected, actual);
assertEquals(1, c.add(3, -2));

}
public voidtestMultiply() { … }
}
P. Grafion/ Junitv1.4
7
Fixture
Fixture
Fixture


Ensemble des objets utilisés dans
Ensemble des objets utilisés dans
plusieurs fonctions d’une même classe de
plusieurs fonctions d’une même classe de
test
test


Chaque objet utilisé est alors
Chaque objet utilisé est alors


déclaré en tant que variable d’instance de la
déclaré en tant que variable d’instance de la
classe de test
classe de test


initialisé dans la méthode
initialisé dans la méthode
setUp
setUp
()
()


éventuellement libéré dans la méthode
éventuellement libéré dans la méthode
tearDown
tearDown
()
()
P. Grafion/ Junitv1.4
8
Exemple avec fixture
Exemple avec
Exemple avec
fixture
fixture
Calculette
+ add(int, int)
+ multiply(int, int)
TestCase
CalculetteTest
+ testAdd()
+ testMultiply()
+ setUp()
public class CalculetteTestextendsTestCase
{
privateCalculette_calc;
public voidsetUp() {
_calc = new Calculette();
}
public voidtestAdd() {
intexpected= 7;
intactual= _calc.add(3, 4);
assertEquals(expected, actual);
assertEquals(-6, _calc.add(3, -2));
assertEquals(-5, _calc.add(-3, -2));
}
public voidtearDown() { _calc = null; }
}
P. Grafion/ Junitv1.4
9
setUpet tearDown
setUp
setUp
et
et
tearDown
tearDown


setUp
setUp
est exécutée
est exécutée
avant chaque méthode
avant chaque méthode
testXXX
testXXX


tearDown
tearDown
est exécutée
est exécutée
après chaque méthode
après chaque méthode
testXXX
testXXX
setUp()
tearDown()
testFun1()
setUp()
tearDown()
testFun2()
P. Grafion/ Junitv1.4
10
Exécuter un test isolément
Exécuter un test isolément
Exécuter un test isolément


Définir un main utilisant un
Définir un main utilisant un
TestRunner
TestRunner
import junit.framework.TestCase;
public class CalculetteTestextendsTestCase{
…;
public staticvoidmain(String[] args){
// affichage dans une vue textuelle
junit.textui.TestRunner.run(CalculetteTest.class);
}
}


Il existe aussi des vues graphiques :
Il existe aussi des vues graphiques :


junit.swingui.TestRunner
junit.swingui.TestRunner
, …
, …
P. Grafion/ Junitv1.4
11
Résultat de l’exécution du test (mode texte)
Résultat de l’exécution du test (mode texte)
Résultat de l’exécution du test (mode texte)
$ set CLASSPATH=/java/junit3.8.2/junit.jar
$ javacCalculetteTest.java
$ java CalculetteTest
.F
Time: 0
Therewas1 failure:
1)
testAdd(CalculetteTest)junit.framework.AssertionFailedError:
expected:<-6> but was:<1>
atCalculetteTest.testAdd(CalculetteTest.java:15)
atCalculetteTest.main(CalculetteTest.java:21)
FAILURES!!!
Tests run: 1, Failures: 1, Errors: 0
Nombre de méthodes
de test exécutées
Nombre de méthodes
de test exécutées
Nombre d’échecs
Nombre d’échecs
Nombre d’Exception
Nombre d’Exception
P. Grafion/ Junitv1.4
12
Résultat de l’exécution du test sous Eclipse
Résultat de l’exécution du test sous
Résultat de l’exécution du test sous
Eclipse
Eclipse
Nombre d’échecs
Nombre d’échecs
Nombre d’Exception
Nombre d’Exception
P. Grafion/ Junitv1.4
13
Failurevs Exception
Failure
Failure
vs Exception
vs Exception


"
"
Failure
Failure
" = assertion (
" = assertion (
assertXXX
assertXXX
) qui échoue
) qui échoue


"
"
Error
Error
" = Exception non prévue ou non attrapée
" = Exception non prévue ou non attrapée
FAILURES!!!
Tests run: 5, Failures: 1, Errors: 3
Nombre de méthodes
de test exécutées
Nombre de méthodes
de test exécutées
Nombre d’échecs
Nombre d’échecs
Nombre d’Exception
Nombre d’Exception
Lors de la détection d'une "
Lors de la détection d'une "
Failure
Failure
" ou "
" ou "
Error
Error
"
"
dans une méthode,
dans une méthode,
JUnit
JUnit
:
:


interrompt l'exécution de cette méthode
interrompt l'exécution de cette méthode


lance l'exécution de la méthode de test suivante
lance l'exécution de la méthode de test suivante
P. Grafion/ Junitv1.4
14
Exemple avec Failureset Exceptions (1)
Exemple avec
Exemple avec
Failures
Failures
et Exceptions (1)
et Exceptions (1)
package junit38samples;
import junit.framework.TestCase; import java.io.*;
public class TestWithFailuresAndErrorsextendsTestCase{
public voidtestFailure1() {
assertEquals(1, 4 -2); // échoue! => break
assertEquals(1, 4 -3);
}
public voidtestNullPointerExceptionThrown() {
String s = null;
assertEquals(0, s.length()); // Exception => break
}
public voidtestDivideByZero() {
inti = 3 / 0; // Exception => break
i = 5;
}
public voidtestException1() throwsFileNotFoundException{
FileReaderfr= new FileReader("X.java"); // Exception => break
assertNotNull(fr);
}
public voidtestException2() {
try{
FileReaderfr= new FileReader("X.java");
fail("exception expected"); // ne doit pas passer!
} catch (FileNotFoundExceptione) { /* OK! */ }
assertEquals(2, 1 + 1); // passe!
}
public staticvoidmain(String[] args){
junit.textui.TestRunner.run(TestWithFailuresAndErrors.class);
}
}
P. Grafion/ Junitv1.4
15
Exemple avec Failureset Exceptions (2)
Exemple avec
Exemple avec
Failures
Failures
et Exceptions (2)
et Exceptions (2)
$ set CLASSPATH=/java/junit3.8.1/junit.jar
$ javacjunit38samples/TestWithFailuresAndErrors.java
$ java junit38samples.TestWithFailuresAndErrors
.F.E.E.E.
Time: 0
Therewere3 errors:
1)
testNullPointerExceptionThrown(junit38samples.TestWithFailur
esAndErrors)java.lang.NullPointerException
[…]
FAILURES!!!
Tests run: 5, Failures: 1, Errors: 3
Nombre de méthodes
de test exécutées
Nombre de méthodes
de test exécutées
Nombre d’échecs
Nombre d’échecs
Nombre d’Exception
Nombre d’Exception
P. Grafion/ Junitv1.4
16
Exemple avec Failureset Exceptions (3)
Exemple avec
Exemple avec
Failures
Failures
et Exceptions (3)
et Exceptions (3)
public
public
void
void
testFailure1() {
testFailure1() {
assertEquals
assertEquals
(1, 4
(1, 4
-
-
2); // échoue! => break
2); // échoue! => break
assertEquals
assertEquals
(1, 4
(1, 4
-
-
3); // vrai mais pas atteint!
3); // vrai mais pas atteint!
assertEquals
assertEquals
(2, 4
(2, 4
-
-
3); // faux mais pas atteint!
3); // faux mais pas atteint!
}
}
Therewas1 failure:
1)
testFailure1(TestWithFailuresAndErrors)junit.framework.AssertionFailedError:
expected:<1> but was:<2>
at
TestWithFailuresAndErrors.testFailure1(TestWithFailuresAndErrors.java:6)
P. Grafion/ Junitv1.4
17
Exemple avec Failureset Exceptions (4)
Exemple avec
Exemple avec
Failures
Failures
et Exceptions (4)
et Exceptions (4)
public
public
void
void
testNullPointerExceptionThrown
testNullPointerExceptionThrown
() {
() {
String s =
String s =
null
null
;
;
assertEquals
assertEquals
(0,
(0,
s.length
s.length
()); // Exception => break
()); // Exception => break
assertEquals
assertEquals
(1, 4
(1, 4
-
-
3); // vrai mais pas atteint!
3); // vrai mais pas atteint!
assertEquals
assertEquals
(2, 4
(2, 4
-
-
3); // faux mais pas atteint!
3); // faux mais pas atteint!
}
}
Therewere3 errors:
1) testNullPointerExceptionThrown(TestWithFailuresAndErrors)java.lang.NullPointerException
at
TestWithFailuresAndErrors.testNullPointerExceptionThrown(TestWithFailuresAndErrors.java:11
P. Grafion/ Junitv1.4
18
Exemple avec Failureset Exceptions (5)
Exemple avec
Exemple avec
Failures
Failures
et Exceptions (5)
et Exceptions (5)
public
public
void
void
testDivideByZero
testDivideByZero
() {
() {
int
int
i = 3 / 0; // Exception => break
i = 3 / 0; // Exception => break
i = 5; // pas atteint!
i = 5; // pas atteint!
}
}
2) testDivideByZero(TestWithFailuresAndErrors)
java.lang.ArithmeticException: / by zero
at
TestWithFailuresAndErrors.testDivideByZero(TestWithFailuresAndErrors.java:14)
P. Grafion/ Junitv1.4
19
Exemple avec Failureset Exceptions (6)
Exemple avec
Exemple avec
Failures
Failures
et Exceptions (6)
et Exceptions (6)
public
public
void
void
testException1()
testException1()
throws
throws
FileNotFoundException
FileNotFoundException
{
{
FileReader
FileReader
fr
fr
= new
= new
FileReader
FileReader
("X.java");
("X.java");
// (Exception => break)
// (Exception => break)
assertNotNull
assertNotNull
(
(
fr
fr
); // pas atteint!
); // pas atteint!
}
}
3) testException1(TestWithFailuresAndErrors)java.io.FileNotFoundException:
X.java (Le fichier spécifié est introuvable)
atjava.io.FileInputStream.open(Native Method)
atjava.io.FileInputStream.<init>(FileInputStream.java:106)
atjava.io.FileInputStream.<init>(FileInputStream.java:66)
atjava.io.FileReader.<init>(FileReader.java:41)
at
TestWithFailuresAndErrors.testException1(TestWithFailuresAndErrors.java:18)
P. Grafion/ Junitv1.4
20
Exemple avec Failureset Exceptions (7)
Exemple avec
Exemple avec
Failures
Failures
et Exceptions (7)
et Exceptions (7)
public
public
void
void
testException2() {
testException2() {
try
try
{
{
FileReader
FileReader
fr
fr
= new
= new
FileReader
FileReader
("X.java");
("X.java");
fail
fail
("exception
("exception
expected
expected
");
");
} catch (
} catch (
FileNotFoundException
FileNotFoundException
e) {
e) {
// OK!
// OK!
}
}
assertEquals
assertEquals
(2, 1 + 1); // passe!
(2, 1 + 1); // passe!
}
}
OK!
P. Grafion/ Junitv1.4
21
TestSuite
TestSuite
TestSuite
Une
Une
TestSuite
TestSuite
est une composition de Test
est une composition de Test
TestSuite
+ addTest(Test)
+ run(TestResult)
(Composite design pattern)
(Composite design pattern)
Assert
+ assertEquals()
+ assertNotNull()
+ assertNull()
+ assertSame()
+ assertTrue()
TestCase
+ run(TestResult)
+ setUp()
+ tearDown()
<<interface>>
Test
+ run(TestResult)
P. Grafion/ Junitv1.4
22
Construction d’une TestSuite
Construction d’une
Construction d’une
TestSuite
TestSuite
On définit dans les classes de Test la méthode
On définit dans les classes de Test la méthode
public
public
static
static
TestSuite
TestSuite
suite()
suite()
2 possibilités :
2 possibilités :


Ajouter les méthodes à tester explicitement
Ajouter les méthodes à tester explicitement
public
public
TestSuite
TestSuite
()
()
construit une
construit une
TestSuite
TestSuite
vide
vide
public
public
void
void
addTest
addTest
(Test
(Test
test)
test)


Utiliser l’introspection
Utiliser l’introspection
public
public
TestSuite
TestSuite
(java.lang.Class
(java.lang.Class
theClass
theClass
)
)
Adds
Adds
all
all
the
the
methods
methods
starting
starting
with
with
"test" as test cases to
"test" as test cases to
the
the
suite.
suite.
P. Grafion/ Junitv1.4
23
Construction d’une TestSuiteexplicitement
Construction d’une
Construction d’une
TestSuite
TestSuite
explicitement
explicitement
public class CalculetteTestextendsTestCase{
public voidtestAdd() {
assertEquals(7, _calc.add(3, 4));
}
// …
public CalculetteTest(String name) {
super(name);
}
public staticTestsuite() {
TestSuitesuite = new TestSuite();
suite.addTest(new CalculetteTest("testAdd"));
suite.addTest(new CalculetteTest("testMultiply"));
// …
return suite;
}
Chaque méthode à tester doit être ajoutée explicitement.
Chaque méthode à tester doit être ajoutée explicitement.
P. Grafion/ Junitv1.4
24
Construction d’une TestSuitepar Introspection
Construction d’une
Construction d’une
TestSuite
TestSuite
par Introspection
par Introspection
Calculette
+ add(int, int)
+ multiply(int, int)
TestCase
CalculetteTest
+ testAdd()
+ testMultiply()
+ suite()
public class CalculetteTestextendsTestCase
{
// …
public voidtestAdd() {
intexpected= 7;
assertEquals(expected, _calc.add(3, 4));
}
public voidtestMultiply() {
assertEquals(12, _calc.multiply(3, 4));
}
// …
public staticTestsuite() {
return new
TestSuite(CalculetteTest.class);
}
Chaque méthode (sans paramètre, qui retourne
Chaque méthode (sans paramètre, qui retourne
void
void
et) dont le
et) dont le
nom est préfixé par test est ajoutée à la suite.
nom est préfixé par test est ajoutée à la suite.
P. Grafion/ Junitv1.4
25
Exécuter un ensemble de tests
Exécuter un ensemble de tests
Exécuter un ensemble de tests
public class AllTestextendsTestCase{

public staticTestSuitesuite() {
final TestSuitesuite = new TestSuite();
// Domaintest
suite.addTest(CategoryTest.suite());
suite.addTest(CustomerTest.suite());
// Service test
suite.addTest(CustomerServiceTest.suite());
// Web test
suite.addTest(CreateCustomerServletTest.suite());
return suite;
}
public staticvoidmain(String[] args){
junit.textui.TestRunner.run(suite());
}
}
P. Grafion/ Junitv1.4
26
JUnit3.8 et Design patterns
JUnit
JUnit
3.8 et Design patterns
3.8 et Design patterns
(http://junit.sourceforge.net/junit3.8.1/doc/
(http://junit.sourceforge.net/junit3.8.1/doc/
cookstour
cookstour
/
/
cookstour.htm
cookstour.htm
)
)
P. Grafion/ Junitv1.4
27
JUnit4
JUnit
JUnit
4
4
http://
http://
junit.sourceforge.net
junit.sourceforge.net
http://
http://
junit.sourceforge.net
junit.sourceforge.net
/javadoc_40
/javadoc_40
http://
http://
www.devx.com
www.devx.com
/Java/Article/31983/1954?
/Java/Article/31983/1954?
pf
pf
=
=
true
true
P. Grafion/ Junitv1.4
28
Caractéristiques de JUnit4
Caractéristiques de JUnit4
Caractéristiques de JUnit4
JUnit
JUnit
4
4


assure une compatibilité ascendante
assure une compatibilité ascendante
et descendante
et descendante


JUnit
JUnit
4 peut exécuter directement des tests
4 peut exécuter directement des tests
JUnit
JUnit
3
3


Des tests
Des tests
JUnit
JUnit
4 peuvent être exécuter dans des
4 peuvent être exécuter dans des
environnements
environnements
JUnit
JUnit
3 (grâce à JUnit4TestAdapter)
3 (grâce à JUnit4TestAdapter)


utilise les annotations Java 5 à la place de
utilise les annotations Java 5 à la place de
l’héritage et des conventions de
l’héritage et des conventions de
nommage
nommage


permet à une classe de test d’hériter d’une
permet à une classe de test d’hériter d’une
autre classe
autre classe
P. Grafion/ Junitv1.4
29
Principales différences
Principales différences
Principales différences
Avec JUnit4 :
Avec JUnit4 :


On utilise les annotations sur les méthodes à la
On utilise les annotations sur les méthodes à la
place des conventions de noms des méthodes :
place des conventions de noms des méthodes :
@Test
@Test
indique une méthode de test
indique une méthode de test
@
@
Before
Before
indique une méthode
indique une méthode
setUp
setUp
@
@
After
After
indique une méthode
indique une méthode
tearDown
tearDown


Plus besoin d’hériter de
Plus besoin d’hériter de
TestCase
TestCase


Plus besoin de créer une
Plus besoin de créer une
TestSuite
TestSuite


On importe
On importe
org.junit.
org.junit.
*
*
P. Grafion/ Junitv1.4
30
Exemple avec fixture
Exemple avec
Exemple avec
fixture
fixture
import
import
junit.framework.TestCase
junit.framework.TestCase
;
;
public class CalculetteTest
extendsTestCase{
privateCalculette _calc;
public void
setUp
setUp()
{_calc = new Calculette();}
public void
testadd
testadd() {
actual= _calc.add(3, 4);
assertEquals(7,actual);
}
}
JUnit3.8
import
import
org.junit.Before
org.junit.Before
;
;
import
import
org.junit.Test
org.junit.Test
;
;
import
import
static
static
org.junit.Assert.
org.junit.Assert.
*;
*;
public class CalculetteTest
{
privateCalculette _calc;
@
@
Before
Beforepublic void
setUp1
setUp1()
{_calc = new Calculette();}
@Test
@Testpublic void
add
add() {
actual= _calc.add(3, 4);
assertEquals(7,actual);
}
}
JUnit4
P. Grafion/ Junitv1.4
31
Exécuter un test isolément en mode texte (1)
Exécuter un test isolément en mode texte (1)
Exécuter un test isolément en mode texte (1)
$ set CLASSPATH=/java/junit4.4/junit-4.4.jar
$ javacjunit4samples/CalcTest.java
$ java org.junit.runner.JUnitCore junit4samples.CalcTest
JUnitversion 4.4
.E
Time: 0,01
Therewas1 failure:
1) testAdd(junit4samples.CalcTest)
java.lang.AssertionError: expected:<-6> but was:<1>
atorg.junit.Assert.fail(Assert.java:74)
[…]
FAILURES!!!
Tests run: 1, Failures: 1
Nombre de méthodes
de test exécutées
Nombre de méthodes
de test exécutées
Nombre d’échecs
Nombre d’échecs
Plus de nombre
d’Exception!!
Plus de nombre
d’Exception!!
Il n’est pas nécessaire de définir un main grâce à
Il n’est pas nécessaire de définir un main grâce à
JUnitCore
JUnitCore
P. Grafion/ Junitv1.4
32
Exécuter un test isolément en mode texte (2)
Exécuter un test isolément en mode texte (2)
Exécuter un test isolément en mode texte (2)
On peut aussi définir un main utilisant la façade
On peut aussi définir un main utilisant la façade
JUnitCore
JUnitCore
package junit4samples;
package junit4samples;
import
import
org.junit.Test
org.junit.Test
;
;
import
import
static
static
org.junit.Assert.
org.junit.Assert.
*;
*;
public class
CalcTest
CalcTest{
// …
@Test
@Testpublic void
add
add() {
assertEquals(-6, _calc.add(3, -2));
}
public staticvoidmain(String[] args){
org.junit.runner.JUnitCore.
org.junit.runner.JUnitCore.
main
main
(
(
"junit4samples.CalcTest");
"junit4samples.CalcTest"); }
Note: Il n’existe plus de vue graphique (Green Bar) fournie par
Note: Il n’existe plus de vue graphique (Green Bar) fournie par
JUnit
JUnit
4!
4!
P. Grafion/ Junitv1.4
33
Exécuter un test isolément en mode texte (3)
Exécuter un test isolément en mode texte (3)
Exécuter un test isolément en mode texte (3)
$ set CLASSPATH=/java/junit4.4/junit-4.4.jar
$ javacjunit4samples/CalcTest.java
$ java junit4samples.CalcTest
JUnitversion 4.4
.E
Time: 0,01
Therewas1 failure:
1) testAdd(junit4samples.CalcTest)
java.lang.AssertionError: expected:<-6> but was:<1>
atorg.junit.Assert.fail(Assert.java:74)
[…]
FAILURES!!!
Tests run: 1, Failures: 1
Nombre de méthodes
de test exécutées
Nombre de méthodes
de test exécutées
Nombre d’échecs
Nombre d’échecs
Plus de nombre
d’Exception!!
Plus de nombre
d’Exception!!
L’output est identique au précédent
L’output est identique au précédent
P. Grafion/ Junitv1.4
34
JUnit4 ne distingue plus Failureet Exception
JUnit
JUnit
4 ne distingue plus
4 ne distingue plus
Failure
Failure
et Exception
et Exception
Une Exception non prévue se traduit par une
Une Exception non prévue se traduit par une
failure
failure
JUnitversion 3.8FAILURES!!!
Tests run: 5, Failures: 1, Errors: 3
Nombre de méthodes
de test exécutées
Nombre de méthodes
de test exécutées
Nombre d’échecs
Nombre d’échecs
Nombre d’Exception
Nombre d’Exception
JUnitversion 4.4FAILURES!!!
Tests run: 5, Failures: 4
Nombre de méthodes
de test exécutées
Nombre de méthodes
de test exécutées
Nombre d’échecs
Nombre d’échecs
Rien!
Rien!
P. Grafion/ Junitv1.4
35
Exécuter un ensemble de tests
Exécuter un ensemble de tests
Exécuter un ensemble de tests
package junit4samples;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
@
@
RunWith
RunWith(Suite.class)
@
@
Suite
Suite.SuiteClasses({
Calc1Test.class,
Calc2Test.class
})
public class AllJ4CalcTests {
public staticvoidmain(String[] args) {
org.junit.runner.JUnitCore.main(
"junit4samples.AllJ4CalcTests");
}
}
On annote une nouvelle classe avec @
On annote une nouvelle classe avec @
RunWith
RunWith
and
and
@Suite
@Suite
P. Grafion/ Junitv1.4
36
Paramètres optionnels de @Test
Paramètres optionnels de @Test
Paramètres optionnels de @Test
package junit4samples;
import java.util.ArrayList;
import org.junit.Test;
public class TestParametersTest{
@
Test(
Test(
expected
expected=IndexOutOfBoundsException.class)
public voidoutOfBounds() {
new ArrayList<Object>().get(1);
}
@
Test(timeout
Test(timeout=100)public voidforeverLoop() {
for (;;);
}
Cette méthode doit lever
une exception de ce type
sinon le test échoue
Cette méthode doit lever
une exception de ce type
sinon le test échoue
Ce test doit échouer s’il
dure plus de 100 ms
Ce test doit échouer s’il
dure plus de 100 ms