Pergunta

Estou tentando criar um teste de integração/aceitação usando FIT.Aqui está a estrutura da pasta:

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

Aqui está meu 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>

Executando o teste FIT usando mvn integration-test -X, recebo um erro causado por:

java.lang.IllegalStateException:Falhou com contagens:0 certo, 0 errado, 0 ignorado, 4 exceções

Ainda assim, a saída FIT em C:\JavaTest\target\customer-bills.html é gerado e contém um erro dizendo:java.lang.RuntimeException: The fixture GivenTheFollowingCustomers was not found.

"GivenTheFollowingCustomers" é o cabeçalho da tabela no HTML:

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

Achei que o sistema estaria procurando pelo fixture chamado GivenTheFollowingCustomers?Por que não é capaz de encontrá-lo?

Muito obrigado!

Atualizar:O sistema agora é capaz de encontrar o fixture da primeira mesa, mas apenas da primeira!Eu estava enfrentando o problema porque o cabeçalho da tabela era GivenTheFollowingCustomers em vez de fit.GivenTheFollowingCustomers.Ainda assim, estou recebendo o mesmo erro para todas as outras tabelas/acessórios nesse arquivo HTML.E é bizarro porque não depende da tabela específica.Por exemplo, se eu mover a primeira tabela (GivenTheFollowingCustomers) na segunda posição, ele para de funcionar e o primeiro começa a funcionar.Qualquer pista..?

Atualização2: Tentei executar os testes manualmente com a biblioteca FIT (sem maven) e está funcionando bem!Além disso, outra pessoa escreveu isto: http://osdir.com/ml/java.maven-plugins.mojo.user/2007-07/msg00000.html e não teve respostas.Possível bug no plugin FIT maven..?

Foi útil?

Solução

É um bug conhecido com o plugin FIT maven.A correção deveria ter sido lançada na versão 2.0-beta-4, mas nunca foi lançada.Na verdade, parece que o desenvolvimento parou em dezembro de 2007 (ai!).De qualquer forma, é possível resolver o problema criando a seguinte classe (como visto no 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 );
    }
}

E estendendo-se de ClassLoaderColumnFixture em vez de ColumnFixtures nos jogos.

Isso resolveu meu problema, espero que seja útil para outra pessoa.

Outras dicas

Há um novo plugin maven para ajuste que você pode usar.Basta substituir o plugin por:

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

Então não há necessidade de um acessório especial para carregador de classes.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top