2016-12-09 4 views
1

Моего родителя П ​​содержит maven-surefire-plugin и maven-failsafe-plugin конфигурации, определяющей <groups> и <excludedGroups> Params, как показано ниже, используя мой интерфейс com.adam.testutil.IntegrationTest для JUnit 4 @Category аннотации, чтобы отметьте любой тест как тест интеграции.Есть ли интерфейс в библиотеке третьей стороной использовать для JUnit @Category()

Все модули под родительским помпом (а не только те, у кого есть интеграционные тесты) потребуют com.adam.testutil.IntegrationTest по их пути к классам, чтобы запускались надежные и отказоустойчивые плагины, иначе они бросают ClassNotFoundException.

Таким образом, класс должен быть в модуле, который все модули должны объявлять как зависимость. Я бы предпочел объявить его как зависимость в родительском pom , поэтому все модули наследуют его автоматически, но это создаст проблему с циклической зависимостью, которая остановит работу mvn.

Фактически, даже если в модуле нет модульных или интеграционных тестов, модуль все равно должен объявлять зависимость.

Я также должен сделать модуль, содержащий com.adam.testutil.IntegrationTest первый модуль в порядке сборки, в противном случае он не будет доступен при первоначальной установке на любых новых системах. Я получаю дилемму курица и яйцо - я не могу просто запустить mvn install в пустой репозиторий, потому что зависимость с IntegrationTest еще не находится в локальном репозитории.

На самом деле я особо не хочу создавать новый модуль, чтобы обеспечить IntegrationTest. Было бы намного проще, если бы JUnit включил в библиотеку подходящий класс org.junit.IntegrationTest.

Хотя я думаю, что @Cateogry - отличный способ аннотировать тесты, чтобы отметить их как интеграционные тесты, в многомодульном проекте у него есть все эти недостатки.

Есть ли подходящий или подходящий интерфейс, где-то я мог бы использовать вместо того, чтобы иметь свой собственный?

В худшем случае, насколько JUnit, @Category, maven-surefire-plugin и maven-failafe-plugin заинтересованы, я мог бы использовать интерфейс в JDK, например. java.lang.Cloneable - хотя любой, кто читает код, задается вопросом, что происходит на земле.

Я надеялся, что у Юнит будет что-то, но я не нашел ничего полезного.

Я мог бы просто установить зависимость от сторонней библиотеки в моем родительском помпе, и все будет хорошо.

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

import org.junit.experimental.categories.Category 
import com.adam.testutil.IntegrationTest 

@Category(IntegrationTest.class) 
public DbAndJpaIntegrationTests { 
    ... 
} 

.

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-surefire-plugin</artifactId> 
    <version>2.18.1</version> 
    <configuration> 
     <excludedGroups>com.bp.gis.util.HeavyTest 
     </excludedGroups> 
    </configuration> 
</plugin> 
<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-failsafe-plugin</artifactId> 
    <version>2.18.1</version> 
    <configuration> 
     <includes> 
      <include>**/*.java</include> 
     </includes> 
     <groups>com.bp.gis.util.HeavyTest</groups> 
    </configuration> 
    <executions> 
     <execution> 
      <goals> 
       <goal>integration-test</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 
+0

* Проблема то в том, что каждый модуль в проекте должен иметь зависимость тянуть в com.adam. testutil.IntegrationTest * Какая зависимость требуется здесь? – nullpointer

+0

Не могли бы вы также указать, где находится «IntegrationTest» в настоящее время и какова структура вашего модуля на данный момент? – nullpointer

+0

Я перефразировал вопрос, чтобы ответить на ваши вопросы. – Adam

ответ

0

Если ..most вашего модуля требуется .. интерфейс, вы можете объявить IntegrationTest в отдельном модуле (хотя я хотел бы предложить не только один интерфейс, но попытаться положить вещи, связанные с этим интерфейсом а также в этот модуль). Назовем его именем integration-test для артефакта.

Я бы предпочел, чтобы объявить его как зависимость в родительском П так все модули наследуют его автоматически, но это создаст проблемы круговой зависимости, которая останавливает МВНА работают.

  • Это не обязательно, чтобы объявить зависимость в родительском pom.xml Хотя делать это с помощью <dependencyManagement> можно отметить более эффективное использование integration-test артефакта версий поддерживаемых. Read more about it in the doc.

В самом деле, даже если нет никаких блоков или интеграционных тестов в модуле, модуль еще должен объявить зависимость.

  • Если это так, вы просто не нужно объявить зависимость integration-test артефакт в pom.xml этого модуля.

Я также должен сделать модуль, содержащий com.adam.testutil.IntegrationTest первый модуль в порядке сборки, в противном случае он не будет доступен в первом времени устанавливается на новых систем

  • сортировка Реактор заботится о порядке построения модулей в рамках проекта, в котором зависимые модули строят после успешной сборки модулей они зависят. You get to know more about it here. Так ваш integration-test будет строить до любого модуля в том же проекте, который зависит от него.

На самом деле я не особо хочу, чтобы создать новый модуль только обеспечить IntegrationTest. Было бы намного проще, если бы у JUnit был включен подходящий класс org.junit.IntegrationTest в библиотеке.

Так что там есть удобный интерфейс? Я могу просто установить зависимость от в моем родительском pom, и все будет хорошо.

  • Если вы не разоблачить и доказать, что IntegrationTest интерфейс полезно, я сомневаюсь, что он может быть включен в junit Lib. И то же самое для удобного интерфейса там где-то, что ваш интерфейс IntegrationTest пытается сделать, и стоит ли это быть окончательным вопросом.
  • После этого, если возможно включить (принять) в любую из библиотек области проверки, может быть очень удобно импортировать эту зависимость lib в ваш родительский pom.xml.
  • До тех пор я все же предлагаю использовать индивидуальный подход integration-test.
+0

У вас должен быть интерфейс на пути к классам во всех модулях, когда maven-surefire-plugin и maven-failafe-plugin настроены в родительском помпе с ссылкой. Спасибо за ссылку на сортировку реактора. – Adam

1

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

В этом случае вы можете использовать соглашение об именах. по умолчанию для отказоустойчивых является described in the docs:

<includes> 
    <include>**/IT*.java</include> 
    <include>**/*IT.java</include> 
    <include>**/*ITCase.java</include> 
</includes> 

Для безошибочного, the defaults are:

<includes> 
    <include>**/Test*.java</include> 
    <include>**/*Test.java</include> 
    <include>**/*TestCase.java</include> 
</includes> 
+0

Это основной способ сделать дифференциацию, но на самом деле это намного эффективнее, чтобы иметь возможность маркировать тестовые классы соответствующей аннотацией, так же как методы тестирования JUnit в классе помечены аннотацией '@ Test'. Причина, по которой это более эффективно - когда вам нужно работать над проектом, где домен на самом деле имеет какое-то отношение к тестированию, а слово «тест» распространяется через популяцию имен классов, если вам нужно беспокоиться о том, как вы называете свой тесты также, это больше умственной энергии, чем просто аннотирование. – Adam