Перейти к основному содержимому

Запуск одного теста или метода с помощью Maven

· 5 мин. чтения

Задача: Сумма двух чисел

Напишите функцию twoSum. Которая получает массив целых чисел nums и целую сумму target, а возвращает индексы двух чисел, сумма которых равна target. Любой набор входных данных имеет ровно одно решение, и вы не можете использовать один и тот же элемент дважды. Ответ можно возвращать в любом порядке...

ANDROMEDA

1. Обзор

Обычно мы выполняем тесты во время сборки Maven с помощью плагина Maven surefire .

В этом руководстве будет показано, как использовать этот плагин для запуска одного тестового класса или тестового метода.

2. Введение в проблему

Плагин Maven surefire прост в использовании. У него только одна цель: проверить .

Поэтому при конфигурации по умолчанию мы можем выполнить все тесты в проекте командой: mvn test .

Иногда нам может понадобиться выполнить один единственный тестовый класс или даже один тестовый метод.

В этом руководстве мы возьмем JUnit 5 в качестве примера поставщика тестирования, чтобы решить, как его достичь.

3. Пример проекта

Чтобы показать результаты теста более простым способом, давайте создадим пару простых тестовых классов:

class TheFirstUnitTest {

// declaring logger ...

@Test
void whenTestCase_thenPass() {
logger.info("Running a dummyTest");
}
}

class TheSecondUnitTest {

// declaring logger ...

@Test
void whenTestCase1_thenPrintTest1_1() {
logger.info("Running When Case1: test1_1");
}

@Test
void whenTestCase1_thenPrintTest1_2() {
logger.info("Running When Case1: test1_2");
}

@Test
void whenTestCase1_thenPrintTest1_3() {
logger.info("Running When Case1: test1_3");
}

@Test
void whenTestCase2_thenPrintTest2_1() {
logger.info("Running When Case2: test2_1");
}
}

В классе TheFirstUnitTest у нас есть только один тестовый метод. Однако TheSecondUnitTest содержит четыре метода тестирования. Все имена наших методов следуют шаблону « когда…тогда… ».

Для простоты мы заставили каждый тестовый метод выводить строку, указывающую, что этот метод вызывается.

Теперь, если мы запустим mvn test , все тесты будут выполнены:

$ mvn test
...
[INFO] Scanning for projects...
...
[INFO] -------------------------------------------------------
[INFO] T E S T S
[INFO] -------------------------------------------------------
[INFO] Running com.foreach.runasingletest.TheSecondUnitTest
16:58:16.444 [main] INFO ...TheSecondUnitTest - Running When Case2: test2_1
16:58:16.448 [main] INFO ...TheSecondUnitTest - Running When Case1: test1_1
16:58:16.449 [main] INFO ...TheSecondUnitTest - Running When Case1: test1_2
16:58:16.450 [main] INFO ...TheSecondUnitTest - Running When Case1: test1_3
[INFO] Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.065 s - in com.foreach.runasingletest.TheSecondUnitTest
[INFO] Running com.foreach.runasingletest.TheFirstUnitTest
16:58:16.453 [main] INFO ...TheFirstUnitTest - Running a dummyTest
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0 s - in com.foreach.runasingletest.TheFirstUnitTest
[INFO]
[INFO] Results:
[INFO]
[INFO] Tests run: 5, Failures: 0, Errors: 0, Skipped: 0
[INFO]
...

Итак, теперь давайте скажем Maven выполнять только указанные тесты.

4. Выполните один тестовый класс

Плагин Maven surefire предоставляет параметр « test », который мы можем использовать для указания тестовых классов или методов, которые мы хотим выполнить.

Если мы хотим выполнить один тестовый класс, мы можем выполнить команду: mvn test -Dtest=”TestClassName”.

Например, мы можем передать -Dtest="TheFirstUnitTest" в команду mvn , чтобы выполнить только класс TheFirstUnitTest :

$ mvn test -Dtest="TheFirstUnitTest"
...
[INFO] Scanning for projects...
...
[INFO] -------------------------------------------------------
[INFO] T E S T S
[INFO] -------------------------------------------------------
[INFO] Running com.foreach.runasingletest.TheFirstUnitTest
17:10:35.351 [main] INFO com.foreach.runasingletest.TheFirstUnitTest - Running a dummyTest
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.053 s - in com.foreach.runasingletest.TheFirstUnitTest
[INFO]
[INFO] Results:
[INFO]
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
...

Как видно из вывода, выполняется только тот тестовый класс, который мы передали параметру « test ».

5. Выполните один метод тестирования

Кроме того, мы можем попросить плагин Maven surefire выполнить один тестовый метод, передав -Dtest=”TestClassName#TestMethodName” в команду mvn .

Теперь давайте выполним метод whenTestCase2_thenPrintTest2_1() в классе TheSecondUnitTest :

$ mvn test -Dtest="TheSecondUnitTest#whenTestCase2_thenPrintTest2_1"    
...
[INFO] Scanning for projects...
...
[INFO] -------------------------------------------------------
[INFO] T E S T S
[INFO] -------------------------------------------------------
[INFO] Running com.foreach.runasingletest.TheSecondUnitTest
17:22:07.063 [main] INFO ...TheSecondUnitTest - Running When Case2: test2_1
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.057 s - in com.foreach.runasingletest.TheSecondUnitTest
[INFO]
[INFO] Results:
[INFO]
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
...

Как мы видим, на этот раз мы выполнили только указанный тестовый метод.

6. Подробнее о параметре теста

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

На самом деле, плагин Maven surefire позволяет нам устанавливать значение параметра теста в разных форматах для гибкого выполнения тестов.

Далее мы покажем некоторые часто используемые форматы:

  • Выполнить несколько тестовых классов по имени: -Dtest="TestClassName1, TestClassName2, TestClassName3..."
  • Выполнение нескольких тестовых классов по шаблону имени: -Dtest="*ServiceUnitTest" или -Dtest="The*UnitTest, Controller*Test"
  • Укажите несколько методов тестирования по имени: -Dtest="ClassName#method1+method2"
  • Укажите несколько имен методов по шаблону имени: -Dtest=”ClassName#whenSomethingHappens_*”

Наконец, давайте посмотрим еще один пример.

Допустим, мы хотим выполнить только все методы whenTestCase1… в классе TheSecondUnitTest .

Итак, следуя шаблону, о котором мы говорили выше, мы надеемся, что -Dtest=”TheSecondUnitTest#whenTestCase1*” выполнит эту работу:

$ mvn test -Dtest="TheSecondUnitTest#whenTestCase1*"
...
[INFO] Scanning for projects...
...
[INFO] -------------------------------------------------------
[INFO] T E S T S
[INFO] -------------------------------------------------------
[INFO] Running com.foreach.runasingletest.TheSecondUnitTest
17:51:04.973 [main] INFO ...TheSecondUnitTest - Running When Case1: test1_1
17:51:04.979 [main] INFO ...TheSecondUnitTest - Running When Case1: test1_2
17:51:04.980 [main] INFO ...TheSecondUnitTest - Running When Case1: test1_3
[INFO] Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.055 s - in com.foreach.runasingletest.TheSecondUnitTest
[INFO]
[INFO] Results:
[INFO]
[INFO] Tests run: 3, Failures: 0, Errors: 0, Skipped: 0
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
...

Да, как мы и ожидали, были выполнены только три метода тестирования, соответствующие указанному шаблону имени.

7. Заключение

Плагин Maven surefire предоставляет тестовый параметр. Это дает нам большую гибкость в выборе тестов, которые мы хотим выполнить.

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

Кроме того, на примерах мы рассмотрели, как запускать только указанные тестовые классы или тестовые методы с помощью Maven.

Как всегда, код статьи можно найти на GitHub .