Ошибка сборки FIT с Maven
-
14-11-2019 - |
Вопрос
Я пытаюсь провести интеграционное/приемочное тестирование с использованием 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:Приспособление не удалось с подсчетом: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
) во втором положении он перестает работать и вместо него начинает работать первый.Есть подсказка..?
Обновление2: Я попытался запустить тесты вручную с помощью библиотеки FIT (без maven), и все работает нормально!Кроме того, кто-то еще написал это: http://osdir.com/ml/java.maven-plugins.mojo.user/2007-07/msg00000.html и не было ответов.Возможная ошибка в плагине FIT maven..?
Решение
Это известная ошибка с плагином FIT maven.Исправление должно было быть выпущено в версии 2.0-beta-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
в светильниках.
Это решило мою проблему, надеюсь, это будет полезно кому-то еще.
Другие советы
Существует новый плагин 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>
Тогда нет необходимости в специальном приспособлении для загрузки классов.