1. 개요

일반적으로 Maven surefire 플러그인을 사용하여 Maven 빌드 중에 테스트를 실행합니다 .

이 사용방법(예제)에서는 이 플러그인을 사용하여 단일 테스트 클래스 또는 테스트 메서드를 실행하는 방법을 살펴봅니다.

2. 문제 소개

Maven surefire 플러그인은 사용하기 쉽습니다. 목표는 단 하나, test 입니다 .

따라서 기본 구성으로 mvn test 명령으로 프로젝트의 모든 테스트를 실행할 수 있습니다 .

때로는 단일 테스트 클래스 또는 단일 테스트 메서드를 실행해야 할 수도 있습니다.

이 사용방법(예제)에서는 JUnit 5를 테스트 Provider 예제로 사용하여 이를 달성하는 방법을 설명합니다.

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 에는 네 가지 테스트 메서드가 포함되어 있습니다. 모든 메서드 이름은 " when...then... " 패턴을 따릅니다 .

간단하게 하기 위해 각 테스트 메서드 출력에 메서드가 호출되고 있음을 나타내는 줄을 만들었습니다.

이제 mvn test 를 실행하면 모든 테스트가 실행됩니다.

$ mvn test
...
[INFO] Scanning for projects...
...
[INFO] -------------------------------------------------------
[INFO]  T E S T S
[INFO] -------------------------------------------------------
[INFO] Running com.baeldung.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.baeldung.runasingletest.TheSecondUnitTest
[INFO] Running com.baeldung.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.baeldung.runasingletest.TheFirstUnitTest
[INFO] 
[INFO] Results:
[INFO] 
[INFO] Tests run: 5, Failures: 0, Errors: 0, Skipped: 0
[INFO] 
 ...

다음으로 지정된 테스트만 실행하도록 Maven에 지시해 보겠습니다.

4. 단일 테스트 클래스 실행

Maven surefire 플러그인은  실행할 테스트 클래스 또는 메소드를 지정하는 데 사용할 수 있는 테스트 매개변수를 제공합니다.

단일 테스트 클래스를 실행하려면 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.baeldung.runasingletest.TheFirstUnitTest
17:10:35.351 [main] INFO com.baeldung.runasingletest.TheFirstUnitTest - Running a dummyTest
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.053 s - in com.baeldung.runasingletest.TheFirstUnitTest
[INFO] 
[INFO] Results:
[INFO] 
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO] 
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
 ...

출력에서 볼 수 있듯이 테스트 매개변수 에 전달한 테스트 클래스만  실행됩니다.

5. 단일 테스트 방법 실행

또한 mvn 명령 에  -Dtest=”TestClassName#TestMethodName”을  전달하여 단일 테스트 메서드를 실행하도록 Maven surefire 플러그인에 요청할 수 있습니다 .

이제 TheSecondUnitTest 클래스 에서 whenTestCase2_thenPrintTest2_1() 메서드를 실행해 보겠습니다 .

$ mvn test -Dtest="TheSecondUnitTest#whenTestCase2_thenPrintTest2_1"    
...
[INFO] Scanning for projects...
...
[INFO] -------------------------------------------------------
[INFO]  T E S T S
[INFO] -------------------------------------------------------
[INFO] Running com.baeldung.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.baeldung.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_*”

마지막으로 예를 하나 더 보겠습니다.

TheSecondUnitTest 클래스의 모든 " whenTestCase1... " 메서드 만 실행하고 싶다고 가정해 보겠습니다 .

따라서 위에서 설명한 패턴에 따라 -Dtest=”TheSecondUnitTest#whenTestCase1*”가 작업을 수행하기를 바랍니다.

$ mvn test -Dtest="TheSecondUnitTest#whenTestCase1*"
...
[INFO] Scanning for projects...
...
[INFO] -------------------------------------------------------
[INFO]  T E S T S
[INFO] -------------------------------------------------------
[INFO] Running com.baeldung.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.baeldung.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 에서 찾을 수 있습니다 .

res – Junit (guide) (cat=Testing)