Question

J'essaie de créer un test d'intégration/acceptation en utilisant FIT.Voici la structure des dossiers :

-src
--main
---fit
----"html files"
---java
----fit
-----"FIT Fixtures files"
----my
-----package
------"business logic files"

Voici mon pom.xml (maven2) :

<project ...>
    <modelVersion>4.0.0</modelVersion>
    <groupId>test</groupId>
    <artifactId>Test</artifactId>
    <version>1.0-SNAPSHOT</version>
    <dependencies>
        ...
        <dependency>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>fit-maven-plugin</artifactId>
            <version>2.0-beta-3</version>
        </dependency>
    </dependencies>
    <build>
        <sourceDirectory>src/main/java</sourceDirectory>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>fit-maven-plugin</artifactId>
                <version>2.0-beta-3</version>
                <executions>
                    <execution>
                        <configuration>
                            <sourceDirectory>src/main/fit</sourceDirectory>
                            <sourceIncludes>*.html</sourceIncludes>
                            <outputDirectory>${project.basedir}\target</outputDirectory>
                        </configuration>
                        <goals>
                            <goal>run</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
    <repositories>
        ...
    </repositories>
</project>

Exécution du test FIT en utilisant mvn integration-test -X, j'obtiens une erreur causée par :

java.lang.IllegalStateException :Le luminaire a échoué avec le nombre:0 vrai, 0 faux, 0 ignoré, 4 exceptions

Pourtant, la sortie FIT dans C:\JavaTest\target\customer-bills.html est généré et contient une erreur indiquant :java.lang.RuntimeException: The fixture GivenTheFollowingCustomers was not found.

« GivenTheFollowingCustomers » est l'en-tête du tableau dans le HTML :

<table>
    <tr>
        <td colspan="3" class="title">GivenTheFollowingCustomers</td>
    </tr>
    ...
</table>

Je pensais que le système aurait recherché le luminaire appelé GivenTheFollowingCustomers?Pourquoi n'arrive-t-il pas à le trouver ?

Merci beaucoup!

Mise à jour:Le système est désormais capable de trouver le luminaire de la première table, mais seulement de la première !J'étais confronté au problème car l'en-tête du tableau était GivenTheFollowingCustomers au lieu de fit.GivenTheFollowingCustomers.Pourtant, j'obtiens la même erreur pour toutes les autres tables/appareils de ce fichier HTML.Et c'est bizarre car cela ne dépend pas du tableau spécifique.Par exemple, si je déplace la première table (GivenTheFollowingCustomers) en deuxième position, il cesse de fonctionner et le premier commence à fonctionner à sa place.Un indice..?

Mise à jour2 : J'ai essayé de lancer les tests manuellement avec la bibliothèque FIT (sans maven) et ça fonctionne bien !De plus, quelqu'un d'autre a écrit ceci : http://osdir.com/ml/java.maven-plugins.mojo.user/2007-07/msg00000.html et je n'avais aucune réponse.Bug possible dans le plugin FIT maven .. ?

Était-ce utile?

La solution

C'est un bug connu avec le plugin FIT maven.Le correctif aurait dû être publié dans la version 2.0-beta-4 mais il n'a jamais été publié.En fait, il semble que le développement se soit arrêté en décembre 2007 (aïe !).Quoi qu'il en soit, il est possible de résoudre le problème en créant la classe suivante (comme vu dans le patch) :

/**
 * Extends ColumnFixture to allow a custom ClassLoader to be used for loading fixtures
 * 
 * @author Mauro Talevi
 */
public class ClassLoaderColumnFixture
    extends ColumnFixture
    implements FixtureClassLoaderEnabled
{

    private FixtureClassLoader classLoader;

    public ClassLoaderColumnFixture()
    {
        this( new FixtureClassLoader() );
    }

    public ClassLoaderColumnFixture()
    {
        this( new FixtureClassLoader() );
    }

    public ClassLoaderColumnFixture( FixtureClassLoader classLoader )
    {
        this.classLoader = classLoader;
    }

    public void enableClassLoader( FixtureClassLoader classLoader )
    {
        this.classLoader = classLoader;
    }

    public Fixture loadFixture( String fixtureName )
        throws InstantiationException, IllegalAccessException
    {
        return classLoader.newFixture( fixtureName );
    }
}

Et s'étendant de ClassLoaderColumnFixture au lieu de ColumnFixtures dans les luminaires.

Cela a résolu mon problème, j'espère que cela sera utile à quelqu'un d'autre.

Autres conseils

Il existe un nouveau plugin Maven pour Fit que vous pouvez utiliser.Remplacez simplement le plugin par :

<plugin>
  <groupId>com.github.cradloff</groupId>
  <artifactId>fit-maven-plugin</artifactId>
  <version>3.0</version>
  <executions>
    <execution>
      <id>fixture</id>
      <phase>test</phase>
      <goals>
        <goal>run</goal>
      </goals>
    </execution>
  </executions>
</plugin>

Il n’est alors pas nécessaire d’avoir recours à un dispositif de chargement de classe spécial.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top