Можно ли игнорировать некоторые модульные тесты?

В настоящее время я работаю над проектом, который широко использует JUnit4 во всех модулях. Мы используем Maven2 для создания проекта и Hudson для непрерывной интеграции. Проект построен и выполняется под Java 1.5.

Недавно мы добавили довольно большой плот модульных тестов, которые понадобятся время от времени, но не хотят запускаться во время процесса сборки (но другие модульные тесты в том же проекте).

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

Возможно, альтернатива просто поставить эти конкретные тесты в нормальный класс, который будет выполняться через main, но это не идеально.

Спасибо за ваши предложения

Ответ 1

Вы можете настроить maven-surefire-plugin.

Например:

<project>
<build>
<plugins>
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.4.2</version>
    <configuration>
      <excludes>
        <exclude>**/TestCircle.java</exclude>
        <exclude>**/TestSquare.java</exclude>
      </excludes>
    </configuration>
  </plugin>
</plugins>

EDIT:
Другим решением является определение profiles, в котором будет выполняться все тесты, например. Хадсон. В режиме разработки вы можете использовать подмножество всего теста для ускорения разработки (или все тесты могут быть в профиле по умолчанию, выбрать тест в профиле dev, так что вам нужно запустить maven с атрибутом -PprofileName). Этот пример лучше подходит для тестов интеграции, в которых запускается loger.

Ответ 2

Существует аннотация "Игнорировать", но ее ручная работа заключается в том, чтобы добавить их, не уверен, что это помогает.
Его можно использовать для метода тестирования или для всего класса

@Ignore("not ready yet") @Test public void testSomething() {...

или

@Ignore public class SomeTest {
    @Test public void testSomething() {...
}

[]]

Ответ 3

Попробуйте JUnit Предположения, которые, кажется, начиная с 4.4

Предполагая, что вы можете обнаружить во время выполнения, если тесты должны быть запущены (через define, properties и т.д.), это позволит вам сохранить хороший чистый набор тестов.

Ответ 4

Я никогда не пробовал, но могли ли вы поместить дополнительные тесты в другую исходную папку и настроить свою конструкцию script для включения или исключения ее в соответствии с вашей целью сборки?

Ответ 7

JUnit 4.7 Я считаю, что поддерживает "Правила" для такого рода вещей (до 4.7 Я думаю, вы могли бы использовать пользовательские Runners, которые будут проверять переменную окружения).

Или вы можете посмотреть, что включает/исключает теги вашей системы сборки.

Ответ 8

Вам нужно добавить следующее в свой POM.xml

<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-surefire-plugin</artifactId>
   <version>2.12.4</version>
   <configuration>
      <skipTests>true</skipTests>
   </configuration>
 </plugin>

Проверьте этот URL: http://maven.apache.org/surefire/maven-surefire-plugin/examples/skipping-test.html

- Абхиджит Дас