Существует ли JUnit TestRunner для запуска групп тестов?

StackOverflow https://stackoverflow.com/questions/153427

  •  03-07-2019
  •  | 
  •  

Вопрос

В настоящее время я использую JUnit 4, и мне необходимо разделить мои тесты на группы, которые можно запускать выборочно в любой комбинации.Я знаю, что в TestNG есть функция аннотирования тестов для назначения их группам, но я не могу перейти на TestNG прямо сейчас.Кажется, это можно было бы легко выполнить в JUnit с помощью некоторых пользовательских аннотаций и пользовательского JUnit TestRunner.Я проверил обе документации JUnit и поискал в Интернете, но ничего подобного найти не смог.Кто-нибудь знает о таком Тестраннере?

Обновить:Спасибо за ваши ответы относительно наборов тестов.Мне следовало бы затронуть эти вопросы в моем первоначальном вопросе.Поехали:Я не хочу использовать наборы тестов, потому что они потребовали бы, чтобы я вручную создавал их и управлял ими, что означает прикосновение ко ВСЕМ моим тестам и упорядочивание их по наборам вручную (слишком много работы и кошмар обслуживания).Все, что мне нужно сделать, это запустить все модульные тесты, за исключением нескольких, которые на самом деле являются интеграционными тестами.Поэтому я хочу прокомментировать их и запустить все остальные.В других случаях я хочу просто запустить интеграционные тесты.У меня также есть необходимость разбить модульный тест на несколько групп, что невозможно с наборами.Надеюсь, это поможет прояснить ситуацию.

Обновление 2:Если в JUnit нет этого OOB, я ищу библиотеку с открытым исходным кодом, которая добавляет это в JUnit (аннотации + пользовательский тестовый модуль JUnit).

Это было полезно?

Решение

Посмотри на Spring's SpringJUnit4ClassRunner - запускатель.Я использовал его для дополнительного запуска тестов на основе системного свойства, используя IfProfileValue IfProfileValue аннотация.

Это:

@IfProfileValue(name="test-groups", values={"unit-tests", "integration-tests"})
  public void testWhichRunsForUnitOrIntegrationTestGroups() {
      // ...
 }

Будет выполняться, если системному свойству 'test-groups' присвоено значение 'unit-tests' или 'integration-tests'.

Обновить: JUnitExt - Младший текст имеет @Category и @Prerequisite аннотации и выглядит так, будто он должен делать то, что вам нужно.Однако я сам никогда им не пользовался, поэтому не могу за это поручиться.

Другие советы

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

Во-первых, вы решаете две проблемы - модульные тесты (часто в том же пакете, что и тестируемый модуль) и интеграционные тесты.Обычно я храню свои интеграционные тесты в отдельном пакете, что-то вроде com.example.project.tests.В eclipse мои проекты выглядят следующим образом:

project/
  src/
    com.example.project/
  tsrc/
    com.example.project/
    com.example.project.tests/

Щелчок правой кнопкой мыши по пакету и выбор "Выполнить" запускают тесты в пакете;выполнение того же самого в исходной папке запускает все тесты.

Вы можете достичь аналогичного эффекта, хотя и выразили незаинтересованность в нем, используя Бегун из люкса.Однако это нарушает DRY - вы должны поддерживать копии имен тестов в актуальном состоянии в классах suite.Однако вы можете легко поместить один и тот же тест в несколько наборов.

@RunWith(Suite.class)
@Suite.SuiteClasses( { 
    TestAlpha.class, 
    TestBeta.class })
public class GreekLetterUnitTests {
}

Конечно, мне действительно следовало бы автоматизировать эти вещи.Хорошим методом для этого является использование задача муравья.

<target name="tests.unit">
  <junit>
    <batchtest>
      <fileset dir="tsrc">
        <include name="**/Test*.java"/>
        <exclude name="**/tests/*.java"/>
      </fileset>
    </batchtest>
  </junit>
</target>
<target name="tests.integration">
  <junit>
    <batchtest>
      <fileset dir="tsrc">
        <include name="**/tests/Test*.java"/>
      </fileset>
    </batchtest>
  </junit>
</target>

Нет, к сожалению, подобной концепции для TestNG groups не существует.Это было запланировано для JUnit4, но по какой-то неясной причине оно было исключено из планирования.

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

JUnit 3 позволяет вам создавать наборы тестов, которые можно запускать как любой другой тест.Разве в JUnit 4 нет аналогичной концепции?

Если вы используете ANT или maven, вы можете контролировать, какие тесты выполняются, фильтруя тесты по имени.Немного неловко, но у вас это может сработать.

У TestNG есть мой голос.Он основан на аннотациях, может запускаться в виде групп, отдельных тестов и т.д., может быть связан с Maven и может запускать все тесты JUnit как часть своих тестовых запусков.

Я настоятельно рекомендую использовать его вместо JUnit.

мой совет - просто откажитесь от JUnit и используйте TestNG.Как только вы привыкнете к TestNG, Junit будет выглядеть как каменный век.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top