Frage

Ich versuche, mit FIT einen Integrations-/Akzeptanztest zu erstellen.Hier ist die Ordnerstruktur:

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

Hier ist meine 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>

Ausführen des FIT-Tests mit mvn integration-test -X, erhalte ich eine Fehlermeldung, verursacht durch:

java.lang.IllegalStateException:Die Vorrichtung ist mit Zählungen fehlgeschlagen:0 richtig, 0 falsch, 0 ignoriert, 4 Ausnahmen

Dennoch ist die FIT-Ausgabe in C:\JavaTest\target\customer-bills.html wird generiert und enthält einen Fehler mit der Meldung:java.lang.RuntimeException: The fixture GivenTheFollowingCustomers was not found.

„GivenTheFollowingCustomers“ ist der Tabellenkopf im HTML:

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

Ich dachte, das System hätte nach dem aufgerufenen Gerät gesucht GivenTheFollowingCustomers?Warum kann es nicht gefunden werden?

Vielen Dank!

Aktualisieren:Das System ist nun in der Lage, den Spielplan für den ersten Tisch zu finden, aber nur den ersten!Ich stand vor dem Problem, weil der Tabellenkopf war GivenTheFollowingCustomers anstatt fit.GivenTheFollowingCustomers.Trotzdem erhalte ich für alle anderen Tabellen/Geräte in dieser HTML-Datei den gleichen Fehler.Und es ist bizarr, weil es nicht von der jeweiligen Tabelle abhängt.Wenn ich zum Beispiel die erste Tabelle verschiebe (GivenTheFollowingCustomers) in der zweiten Position, hört es auf zu arbeiten und stattdessen beginnt das erste zu arbeiten.Irgendeine Ahnung..?

Update2: Ich habe versucht, die Tests manuell mit der FIT-Bibliothek (ohne Maven) auszuführen, und es funktioniert einwandfrei!Außerdem hat jemand anderes Folgendes geschrieben: http://osdir.com/ml/java.maven-plugins.mojo.user/2007-07/msg00000.html und hatte keine Antworten.Möglicher Fehler im FIT-Maven-Plugin?

War es hilfreich?

Lösung

es ist ein bekannter Fehler mit dem FIT-Maven-Plugin.Der Fix hätte in Version 2.0-beta-4 veröffentlicht werden sollen, wurde aber nie veröffentlicht.Tatsächlich scheint die Entwicklung im Dezember 2007 gestoppt worden zu sein (autsch!).Wie auch immer, es ist möglich, das Problem zu lösen, indem man die folgende Klasse erstellt (wie im Patch zu sehen):

/**
 * 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 );
    }
}

Und erstreckt sich von ClassLoaderColumnFixture anstatt ColumnFixtures in den Vorrichtungen.

Das hat mein Problem gelöst, ich hoffe, es wird für jemand anderen hilfreich sein.

Andere Tipps

Es gibt ein neues Maven-Plugin für Fit, das Sie verwenden können.Ersetzen Sie einfach das Plugin durch:

<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>

Dann ist kein spezielles Klassenladegerät erforderlich.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top