Сбой сборки FIT с Maven - PullRequest
       23

Сбой сборки FIT с Maven

1 голос
/ 01 марта 2012

Я пытаюсь создать интеграционное / приемочное тестирование с использованием FIT.Вот структура папок:

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

Вот мой 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>

При выполнении теста FIT с использованием mvn integration-test -X я получаю ошибку, вызванную:

java.lang.IllegalStateException: Fixture не удалось со счетами: 0 правильно, 0 неправильно, 0 проигнорировано, 4 исключения

Тем не менее, вывод FIT в C:\JavaTest\target\customer-bills.htmlсгенерировано и содержит ошибку: java.lang.RuntimeException: The fixture GivenTheFollowingCustomers was not found.

«GivenTheFollowingCustomers» - это заголовок таблицы в HTML:

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

Я думал, что система искала бы прибор с именем GivenTheFollowingCustomers?Почему он не может его найти?

Большое спасибо!

Обновление: Система теперь может найти прибор для первой таблицы, но толькопервый!Я столкнулся с проблемой, потому что заголовок таблицы был GivenTheFollowingCustomers вместо fit.GivenTheFollowingCustomers.Тем не менее, я получаю ту же ошибку для всех других таблиц / приборов в этом HTML-файле.И это странно, потому что это не зависит от конкретной таблицы.Например, если я переместу первый стол (GivenTheFollowingCustomers) во вторую позицию, он перестанет работать, и вместо него начнет работать первый.Любая подсказка ..?

Update2: Я попытался запустить тесты вручную с помощью библиотеки FIT (без maven), и она работает нормально!Кроме того, кто-то еще написал это: http://osdir.com/ml/java.maven-plugins.mojo.user/2007-07/msg00000.html и не получил ответов.Возможная ошибка в плагине FIT maven ..?

Ответы [ 2 ]

1 голос
/ 02 марта 2012

Это известная ошибка с плагином FIT maven.Исправление должно было быть выпущено в версии 2.0-бета-4, но оно никогда не было выпущено.На самом деле, кажется, что разработка остановилась в декабре 2007 года (ой!).В любом случае, решить проблему можно, создав следующий класс (как показано в патче):

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

и расширение от ClassLoaderColumnFixture вместо ColumnFixtures в приборах.* Это решило мою проблему, я надеюсь, что это будет полезно для кого-то еще.

0 голосов
/ 24 января 2018

Существует новый плагин maven, который вы можете использовать.Просто замените плагин на:

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

Тогда нет необходимости в специальном приспособлении для загрузчика классов.

...