Пропускане на тестове с Maven

1. Въведение

Пропускането на тестове често е лоша идея. Има обаче ситуации, в които може да е полезно - може би когато разработваме нов код и искаме да изпълняваме междинни компилации, в които тестовете не преминават или не се компилират.

Само в такива ситуации може да пропуснем тестовете, за да избегнем режийните разходи за тяхното компилиране и изпълнение. Разбира се, помислете, че неизпълнението на тестове може да доведе до лоши практики на кодиране.

В този бърз урок ще разгледаме всички възможни команди и опции за пропускане на тестове с помощта на Maven .

2. Жизнен цикъл на Maven

Преди да влезем в подробности за това как да пропуснем тестове, трябва да разберем кога тестовете се компилират или изпълняват . В статията за целите и фазите на Maven навлизаме по-дълбоко в концепцията за жизнения цикъл на Maven, но за целите на тази статия е важно да знаете, че Maven може:

  1. Игнорирайте тестовете
  2. Съставяне на тестове
  3. Изпълнете тестове

В нашите примери ще използваме фазата на пакета , която включва компилиране и стартиране на тестовете. Опциите, изследвани в този урок, принадлежат на приставката Maven Surefire.

3. Използване на знамена на командния ред

3.1. Пропускане на тестовата компилация

Първо, нека разгледаме пример за тест, който не се компилира:

@Test public void thisDoesntCompile() { baeldung; }

Когато изпълним командата от командния ред:

mvn package

Ще получим грешка:

[INFO] ------------------------------------------------------------- [ERROR] COMPILATION ERROR : [INFO] ------------------------------------------------------------- [ERROR] /Users/baeldung/skip-tests/src/test/java/com/antmordel/skiptests/PowServiceTest.java:[11,9] not a statement [INFO] 1 error

Затова нека да проучим как да пропуснем фазата на компилиране за източниците на теста. В Maven можем да използваме флага maven.test.skip :

mvn -Dmaven.test.skip package

В резултат на това тестовите източници не се компилират и следователно не се изпълняват.

3.2. Пропускане на тестовото изпълнение

Като втора опция, нека видим как можем да компилираме тестовата папка, но да пропуснем процеса на изпълнение . Това е полезно за онези случаи, когато не променяме подписа на методите или класовете, но сме променили бизнес логиката и в резултат на това счупихме тестовете. Нека разгледаме измислен тестов случай като този по-долу, който винаги ще се провали:

@Test public void thisTestFails() { fail("This is a failed test case"); }

Тъй като включихме изявлението fail () , ако изпълним фазата на пакета , компилацията ще се провали с грешката:

[ERROR] Failures: [ERROR] PowServiceTest.thisTestFails:16 This is a failed test case [INFO] [ERROR] Tests run: 2, Failures: 1, Errors: 0, Skipped: 0

Нека си представим, че искаме да пропуснем провеждането на тестовете, но все пак искаме да ги компилираме. В този случай можем да използваме флага -DskipTests :

mvn -DskipTests package

и фазата на пакета ще успее. Също така, в Maven има специален плъгин за изпълнение на тестове за интеграция, наречен плъгин maven failsafe. Тестовете -DskipTests ще пропуснат изпълнението както на модулни тестове (сигурен), така и на тестове за интеграция (неуспешен). За да пропуснем просто тестовете за интеграция, можем да предадем системното свойство -DskipITs .

И накрая, заслужава да се спомене, че вече остарелият флаг -Dmaven.test.skip.exec също ще компилира тестовите класове, но няма да ги изпълнява.

4. Използване на Maven Configuration

В случай, че трябва да изключим компилирането или изпълнението на тестовете за по-дълъг период от време, можем да модифицираме файла pom.xml, за да включим правилната конфигурация.

4.1. Пропускане на тестовата компилация

Както направихме в предишния раздел, нека разгледаме как можем да избегнем компилирането на тестовата папка. В този случай ще използваме файла pom.xml . Нека добавим следното свойство:

 true 

Имайте предвид, че можем да заменим тази стойност, като добавим противоположния флаг в командния ред :

mvn -Dmaven.test.skip=false package

4.2. Пропускане на тестовото изпълнение

Отново, като втора стъпка, нека проучим как можем да изградим тестовата папка, но да пропуснем тестовото изпълнение, като използваме конфигурацията на Maven. За да направим това, трябва да конфигурираме приставката Maven Surefire със свойство:

 true   org.apache.maven.plugins maven-surefire-plugin 2.22.1  ${tests.skip}  

Свойството Maven tests.skip е персонализирано свойство, което предварително дефинирахме. Следователно можем да го заменим, ако искаме да изпълним тестовете:

mvn -Dtests.skip=false package

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

В този бърз урок разгледахме всички алтернативи, които Maven предлага, за да пропуснем компилирането и / или провеждането на тестовете.

Преминахме през опциите на командния ред на Maven и опциите за конфигурация на Maven.