Запускать тесты из внутренних классов через Maven

У меня есть следующая структура тестов:

public class WorkerServiceTest {

    public class RaiseErrorTest extends AbstractDbUnitTest{
        @Test
        public void testSomething(){
        } 

        ...
    }

    ...
}

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

Проблема в том, что mvn test не запускает тест из моего внутреннего класса. Есть ли способ настроить Maven для запуска таких тестов? Конечно, я могу создавать методы в родительском классе, вызывая методы внутреннего класса, но мне нужен более понятный способ.


person Vladimir    schedule 18.01.2010    source источник


Ответы (2)


Да, это возможно с использованием нового (ну, уже не нового) Enclosed бегун (начиная с JUnit 4.5), который запускается все статические внутренние классы внешнего класса.

Чтобы использовать его, просто аннотируйте внешний класс с помощью @RunWith(Enclosed.class) и сделайте внутренние классы статическими.

@RunWith(Enclosed.class)
public class WorkerServiceTest {

    public static class RaiseErrorTest extends AbstractDbUnitTest{
        @Test
        public void testSomething(){
        } 

        ...
    }

    ...
}

И mvn test будет их запускать.

person Pascal Thivent    schedule 19.01.2010
comment
Я пытаюсь это сделать с maven 3.0.4 и Junit 4.11 и все еще не работает. Из Eclipse работает нормально, но не с mvn test. Любые идеи? - person Chirlo; 11.12.2013
comment
Что работает для меня, так это изменить конфигурацию плагина maven-surefire... Я поставил следующую конфигурацию: <configuration> <excludes> <exclude></exclude> </excludes> </configuration> Подробности на здесь - person Carlitos Way; 06.10.2015
comment
@CarlitosWay Можете ли вы рассказать некоторые подробности, они не отображаются в вашем комментарии. Я попытался включить src/main/java, и это все еще не работает. Спасибо. - person Josef.B; 19.11.2015
comment
У @RunWith(Enclosed.class) есть несколько ограничений: если внешний класс (WorkerServiceTest) является абстрактным, внутренние классы по-прежнему игнорируются. Во-вторых, если внутренние классы расширяют внешний класс (это полностью допустимый Java BTW), сборка завершится ошибкой. Другое решение — настройка maven-surefire-plugin исключает — не имеет этих ограничений. - person BrunoMedeiros; 12.10.2016

Я объясняю (немного больше) решение, которое я нашел...

Maven (AFAIK) по умолчанию использует плагин «maven-surefire-plugin» для запуска любых тестов, определенных в вашем проекте maven. Согласно документации этого подключаемого модуля, по умолчанию он исключает тесты, которые заключены во внутренние статические классы (по крайней мере, это было с версией, которую я использую - 2.18.1).

Итак, что я сделал, так это поместил пустое правило исключения; в результате раздел сборки pom выглядит следующим образом:

<build>
  <plugins>
  ...
  <!-- ~~~~~~~~~~ SUREFIRE -->
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-surefire-plugin</artifactId>
      <version>2.18.1</version>
      <configuration>
        <excludes>
          <exclude></exclude>
        </excludes>
      </configuration>
    </plugin>
    ...
  </plugins>
</build>
person Carlitos Way    schedule 19.11.2015
comment
Это сработало!!! Я использовал surefire 2.19, но сомневаюсь, что это было проблемой. Мне, конечно, пришлось изменить тестовую исходную директорию. Спасибо. - person Josef.B; 20.11.2015