Menu

2014-01-08  Edit

crim.fr, prof java

Soutien au projet

Récupération des corpus

Merci de penser à copier vos corpus (archive zip ou tar.gz portant votre nom) sur la clef USB à disposition

Génération de html4txm.jar

Une solution pratique : un script ANT.

  • À la racine du projet, on crée un fichier nommé build.xml avec le contenu suivant (à personnaliser) :

    <project name="html4txm" default="makejar">

    <!-- Construit un jar pour le projet avec tout ce qui est nécessaire -->
    <target name="makejar">
    
        <!-- Chemin du jar à générer -->
        <jar destfile="dist/html4txm.jar">
    
            <!-- les classes compilées du projet -->
            <fileset dir="build" includes="**/*.class" />
    
            <!-- Les différentes bibliothèques nécessaires 
                 (une ligne par fichier jar) -->
            <zipfileset src="lib/jing.jar" />
    
            <!-- Les ressources à inclure -->
            <fileset dir="rsc" includes="xhtml1-transitional.rnc" />
        </jar>
    </target>
    

    </project>

  • Ce script peut ensuite être lancé à l'intérieur d'Eclipse avec un clic droit -> Run as Ant Build

  • Une vue Ant est également disponible dans Eclipse : Menu Window -> Show View -> Ant. On peut ensuite y glisser déposer le fichier build.xml pour voir quelles sont les cibles (target) disponibles et les lancer

Éviter le délai de récupération de la DTD xhtml

http://stackoverflow.com/questions/155101/make-documentbuilder-parse-ignore-dtd-references

// Pour lire les fichiers XML en choisissant de ne pas les valider
// contre la DTD en ligne
DocumentBuilderFactory dbfactory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder;
try {
    builder = dbfactory.newDocumentBuilder();
} catch (ParserConfigurationException pce) {
    log(NORMAL, "Erreur de configuration : "+pce.getMessage());
    return;
}
builder.setEntityResolver(new EntityResolver() {
    @Override
    public InputSource resolveEntity(String publicId, String systemId)
            throws SAXException, IOException {
        if (systemId.contains("xhtml1-transitional.dtd")) {
            return new InputSource(new StringReader(""));
        } else {
            return null;
        }
    }
});

Pour créer un document XML à passer à la transformation XSL :

Document xmlDocument = builder.parse(srcFile);
DOMSource source = new DOMSource(xmlDocument);

Tests unitaires

  • Une des pratiques préconisées par le mouvement de l'eXtreme Programming
  • Tester les classes qui composent un projet
  • Automatisation et possibilité de les rejouer sans intervention humaine
  • Compléter lors de la découverte d'un bug -> augmentation de la couverture
  • Donner plus de sécurité lors des modifications
  • Développement piloté par les tests : ne développer que le strict minimum

jUnit - un outil de test unitaire

« Keep the bar green to keep the code clean! »

  • Une classe de test par classe testée
  • Une classe de test comporte des méthodes de test
  • Les classes de test sont placées dans une arborescence test en parallèle de l'arborescence source

Créer une classe de test jUnit avec Eclipse

  • On crée un dossier de source (Source folder) nommé test à la racine du projet
  • À l'intérieur, on crée la classe de test via new... JUnitTestCase
    • Choisir New JUnit4 Test
    • Donner un nom à la classe de test, généralement terminant par "Test"
    • Cliquer sur le bouton "Finish" (au besoin, accepter l'ajout de JUnit 4 au build path)
  • Dans une classe de test, toutes les méthodes de test :
    • doivent être publiques (public)
    • ne rien retourner (void)
    • ne prendre aucun paramètre
    • Être précédée de l'annotation @Test
  • Au sein d'une méthode de test, on utilise des appels aux méthodes d'assertion de jUnit pour vérifier les résultats renvoyés par les méthodes testées :
    • assertEquals / assertArrayEquals
    • assertTrue / assertFalse
    • assertNull / assertNotNull
    • assertSame / assertNotSame
    • fail
  • Pour lancer les tests : clic droit sur la classe de test dans la vue "Package explorer" : Run As -> Junit Test
  • Objectif : barre verte !

TP : écrire une classe de test pour la classe fr.crim.a2013.i18n.Fr

  • Retrouver votre implémentation de la classe de désaccentuation
  • Créer un nouveau projet Eclipse et y glisser la classe fr.crim.a2013.i18n.Fr dans le dossier src
  • Créer un dossier de source test et une classe fr.crim.a2013.i18n.FrTest pour vérifier le bon fonctionnement de la classe Fr.
  • Quelques cas de tests pour démarrer :

    // Passer null doit renvoyer null
    @Test
    public void testNull() {
        assertNull(Fr.monoton(null));
    }
    
    // Chaîne vide
    @Test
    public void testVide() {
        assertEquals("", Fr.monoton(""));
    }
    
    // Test identité
    @Test
    public void testIdentite() {
        assertEquals("parfait", Fr.monoton("parfait"));
    }
    

Un test plus exhaustif (en rajoutant le fichier "french" dans le dossier rsc)

// Test ultime
@Test
public void testDictionnaire() throws Exception {
    BufferedReader reader = new BufferedReader(
            new InputStreamReader(new FileInputStream(new File("rsc/french")),
                    Charset.forName("UTF-8")));

    Pattern p = Pattern.compile("^[a-zA-Z-' .]+$");

    for (;;) {
        String line = reader.readLine();
        if (line == null) {
            break;
        }

        String mline = Fr.monoton(line);
        if (!p.matcher(mline).matches()) {
            System.err.println(mline);
            Assert.fail();
        }
    }

    reader.close();
}

Related

Wiki: Home

Discussion

Anonymous
Anonymous

Add attachments
Cancel