2010-08-22 3 views
4

Чтобы очистить что-то от гигантского беспорядка, я решил поместить код моих тестов в один обычный проект java (все в src/main/java), а затем объявить, что как a <scope>test</scope> зависимостей в другом проекте, и ожидайте, что тесты будут запущены.run maven tests from classpath

Нет такой удачи. surefire хочет просто запустить тесты, которые он может видеть в источниках.

Я вижу грустно очевидное решение здесь, используя плагин build-helper и добавляя тесты в среду тестовой компиляции в качестве исходного каталога, но я надеялся избежать этого.

В случае, если кто-то задается вопросом, причина в том, что конфигурация POM для использования отказоустойчивого плагина для запуска некоторых тестов интеграции была настолько сложной, что я хотел разделить компиляцию тестовых классов с запуском тесты.

ответ

5

Это возможно с помощью Maven Surefire v2.15. Просто добавьте следующий вид конфигурации для плагина: верного

<build> 
    <plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-surefire-plugin</artifactId> 
    <version>2.15</version> 
    <configuration> 
     <dependenciesToScan> 
     <dependency>com.group.id:my-artifact</dependency> 
     <dependency>com.group.id:my-other-artifact</dependency> 
     </dependenciesToScan> 
     ... 
    </configuration> 
    ... 
    </plugin> 
    ... 
</build> 

Вы также должны объявить фактические зависимости в разделе Зависимости:

<dependencies> 
    <dependency> 
    <groupId>com.group.id</groupId> 
    <artifactId>my-artifact</artifactId> 
    <type>test-jar</type> 
    <version>1.1</version> 
    <scope>test</scope> 
    </dependency> 
    <dependency> 
    <groupId>com.group.id</groupId> 
    <artifactId>my-other-artifact</artifactId> 
    <type>test-jar</type> 
    <version>1.1</version> 
    <scope>test</scope> 
    </dependency> 
</dependencies> 
+0

Вам, вероятно, также понадобится com.group.id:my-artifact «главная банка» (а не только тестовая банка), но в остальном это работает как шарм – mac

1

Разве вы не можете сделать это наоборот?

Я имею в виду, что код src/test/java зависит от вашего основного модуля и запускает тесты в вашем тестовом модуле?

3

Нет такой удачи. surefire хочет просто запустить тесты, которые он может видеть в источниках.

Это в настоящее время не представляется возможным из коробки, безошибочный смотрит на классы в target/test-classes:

Это фактически регистрируется как SUREFIRE-569 - There should be a way to run unit tests from a dependency jar.

Я вижу грустно очевидное решение здесь с использованием встроенного модуля-дополнения и добавления тестов в среду тестовой компиляции в качестве исходного каталога, но я надеялся избежать этого.

В настоящее время обходной путь заключается в использовании dependency:unpack распаковать банку в target/test-classes до test фазы.

+0

когда я делаю это, я получаю NoClassDefFound ошибки для org.junit .Assert! Но это может быть еще притворством чего-то другого. – bmargulies

+0

@bmargulies Хм ... странно. Я не понимаю, почему вы получите NoClassDefFoundError. Я мог бы попробовать это, но позже. –

+0

Я подал сообщение об ошибке. У меня есть некоторые идеи, но я заставил его уйти, казалось бы, несвязанными трюками с классом. Он * может иметь результаты от Eclipse, пишущего файл класса в неподходящий момент. – bmargulies