Ce site met a disposition le build journalier de la traduction francaise du Maven: The Definitive Guide
Consultez :
  • Les documents de reference sur le projet original
  • Les sources de la traduction fr sur GitHub
  • maven


    4.9. Ecrire des tests unitaires

    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().