Изградете буркан с Maven и игнорирайте резултатите от теста

1. Въведение

Това кратко ръководство показва как да изградите буркан с Maven, като същевременно игнорирате резултатите от теста.

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

2. Изграждане на проекта

Нека създадем прост проект, в който включваме и малък тестов случай:

public class TestFail { @Test public void whenMessageAssigned_thenItIsNotNull() { String message = "hello there"; assertNotNull(message); } }

Нека да изградим jar файл, като изпълним следната команда на Maven:

mvn package

Това ще доведе до компилиране на източниците и ще генерира файл maven-0.0.1-SNAPSHOT.jar в директорията / target.

Сега, нека променим теста малко, така че тестът започва да се проваля.

@Test public void whenMessageAssigned_thenItIsNotNull() { String message = null; assertNotNull(message); }

Този път, когато се опитаме да стартираме командата на пакета mvn отново, компилацията се проваля и файлът maven -0.0.1-SNAPSHOT.jar не е създаден.

Това означава, че ако имаме неуспешен тест в нашето приложение, не можем да предоставим изпълним файл, освен ако не поправим теста.

И така, как можем да разрешим този проблем?

3. Аргументи на Maven

Maven има свои аргументи, за да се справи с този проблем:

  • -Dmaven.test.failure.ignore = true игнорира всяка грешка, възникнала по време на изпълнението на теста
  • -Dmaven.test.skip = true няма да компилира тестовете
  • -fn , -fae никога не проваля компилацията, независимо от резултатите от теста

Нека да стартираме командата mvn -Dmaven.test.skip = true и да видим резултатите:

[INFO] Tests are skipped. [INFO] BUILD SUCCESS

Това означава, че проектът ще бъде изграден без компилиране на тестовете.

Сега нека стартираме командата mvn -Dmaven.test.failure.ignore = true :

[INFO] Running testfail.TestFail [ERROR] whenMessageAssigned_thenItIsNotNull java.lang.AssertionError [INFO] BUILD SUCCESS

Нашият модулен тест не е успешен при твърдение, но компилацията е успешна.

И накрая, нека тестваме опциите -fn , -fae . И двете команди package -fn и package -fae изграждат файла на jar и произвеждат изхода BUILD SUCCESS независимо от неуспеха на тестаMessageAssigned_thenItIsNotNull () .

В случай на мултимодулния проект трябва да се използва опцията -fn . -fae продължава с модула, който има неуспешен тест, но прескача всички зависими модули.

4. Приставка Maven Surefire

Друг удобен начин да постигнем нашата цел е да използваме плъгина Surefire на Maven.

За разширен преглед на приставката Surefire вижте тази статия.

За да игнорираме неуспешен тест, можем просто да зададем свойството testFailureIgnore на true :

 maven-surefire-plugin ${maven.surefire.version}   TestFail.java  true  

Сега, нека видим изхода на командата на пакета :

[INFO] T E S T S [INFO] Running testfail.TestFail [ERROR] Tests run: 1, Failures: 1, Errors: 0, Skipped: 0, <<< FAILURE! - in testfail.TestFail

От изхода на текущите тестове можем да видим, че класът TestFail е неуспешен. Но по-нататък виждаме, че съобщението BUILD SUCCESS също е там и файлът maven-0.0.1-SNAPSHOT.jar е компилиран.

В зависимост от нашите нужди можем изобщо да пропуснем провеждането на тестовете. За това можем да заменим реда testFailureIgnore с:

true

Или задайте аргумента на командния ред -DskipTests . Това ще компилира тестовите класове, но изцяло ще пропусне изпълнението на теста.

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

В тази статия научихме как да изградим нашия проект с Maven, независимо от резултатите от теста . Преминахме през практическите примери за пропускане на неуспешните тестове или изключване на компилирането на тестовете изцяло.

Както обикновено, пълният код за тази статия е достъпен в проекта GitHub.