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





Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.