| Ce site met a disposition le build journalier de la traduction francaise du Maven: The Definitive Guide Consultez : | ![]() |
Maven intègre le support des tests unitaires et l'exécution de ces tests fait partie intégrante de son cycle de vie par défaut. Ajoutons quelques tests unitaires à notre projet Simple Weather. Tout
d'abord, créons le package org.sonatype.mavenbook.weather dans le répertoire
src/test/java :
$ cd src/test/java $ cd org/sonatype/mavenbook $ mkdir -p weather/yahoo $ cd weather/yahoo
Maintenant, nous allons créer deux tests unitaires. Le premier testera la classe
YahooParser, et le second la classe WeatherFormatter. Dans le package
weather, créez un fichier YahooParserTest.java avec le contenu présenté dans
l'exemple qui suit.
Exemple 4.12. Test unitaire YahooParserTest du projet Simple Weather
package org.sonatype.mavenbook.weather.yahoo;
import java.io.InputStream;
import junit.framework.TestCase;
import org.sonatype.mavenbook.weather.Weather;
import org.sonatype.mavenbook.weather.YahooParser;
public class YahooParserTest extends TestCase {
public YahooParserTest(String name) {
super(name);
}
public void testParser() throws Exception {
InputStream nyData =
getClass().getClassLoader().getResourceAsStream("ny-weather.xml");
Weather weather = new YahooParser().parse( nyData );
assertEquals( "New York", weather.getCity() );
assertEquals( "NY", weather.getRegion() );
assertEquals( "US", weather.getCountry() );
assertEquals( "39", weather.getTemp() );
assertEquals( "Fair", weather.getCondition() );
assertEquals( "39", weather.getChill() );
assertEquals( "67", weather.getHumidity() );
}
}
Cette classe YahooParserTest étend la classe TestCase de JUnit.
Elle respecte le modèle habituel d'un test JUnit : un constructeur qui prend un unique paramètre de type
String et qui appelle le constructeur de la classe mère et un ensemble de méthodes publiques
dont les noms commencent par “test”, et qui sont invoquées en tant que tests unitaires. Nous avons
une seule méthode de test, testParser, qui teste le YahooParser en
parsant un document XML connu. Le document XML de test s'appelle
ny-weather.xml et est chargé depuis le classpath. Nous ajouterons les ressources pour les tests
dans la Section 4.11, « Ajouter des ressources pour les tests unitaires ». Dans la structure de répertoires Maven, le fichier
ny-weather.xml se trouve dans le répertoire qui contient les ressources de
test — ${basedir}/src/test/resources sous
org/sonatype/mavenbook/weather/yahoo/ny-weather.xml. Ce fichier est lu sous la forme d'un
InputStream et passé à la méthode parse() de
YahooParser. La méthode parse() renvoie un objet de type
Weather, qui est testé par une série d'appels à la méthode
assertEquals(), une méthode définie par TestCase.
Dans le même répertoire, créez un fichier WeatherFormatterTest.java.
Exemple 4.13. Test unitaire WeatherFormatterTest du projet Simple Weather
package org.sonatype.mavenbook.weather.yahoo;
import java.io.InputStream;
import org.apache.commons.io.IOUtils;
import org.sonatype.mavenbook.weather.Weather;
import org.sonatype.mavenbook.weather.WeatherFormatter;
import org.sonatype.mavenbook.weather.YahooParser;
import junit.framework.TestCase;
public class WeatherFormatterTest extends TestCase {
public WeatherFormatterTest(String name) {
super(name);
}
public void testFormat() throws Exception {
InputStream nyData =
getClass().getClassLoader().getResourceAsStream("ny-weather.xml");
Weather weather = new YahooParser().parse( nyData );
String formattedResult = new WeatherFormatter().format( weather );
InputStream expected =
getClass().getClassLoader().getResourceAsStream("format-expected.dat");
assertEquals( IOUtils.toString( expected ).trim(),
formattedResult.trim() );
}
}
Ce second test unitaire du projet teste la classe WeatherFormatter. Comme pour le test
YahooParserTest, la classe WeatherFormatterTest étend elle aussi la
classe TestCase de JUnit. L'unique méthode de test lit la même ressource depuis
${basedir}/src/test/resources dans le répertoire
org/sonatype/mavenbook/weather/yahoo via le classpath des tests unitaires. Nous ajouterons les
ressources de test dans la Section 4.11, « Ajouter des ressources pour les tests unitaires ».
WeatherFormatterTest passe ce fichier d'exemple au YahooParser qui
renvoie un objet de type Weather. Celui-ci est ensuite formaté par
WeatherFormatter. Etant donné que WeatherFormatter affiche une
String, nous allons devoir la tester par rapport à une valeur attendue. La valeur attendue a
été mise dans un fichier texte format-expected.dat qui se trouve dans le même répertoire que
ny-weather.xml. Pour comparer le résultat du test à la valeur attendue, nous lisons cette
valeur attendue dans un InputStream et nous utilisons la classe
IOUtils de Commons IO pour convertir ce fichier en String. Cette
String est ensuite comparée au résultat obtenu grâce à la méthode
assertEquals().