2012-03-01 3 views
1

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

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

ответ

1

Это known bug с плагином FATE 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 в светильниках.

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

0

Существует новый плагин 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> 

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

Смежные вопросы