Java >> Java tutorial >  >> Tag >> maven

Kørsel af en enkelt test eller metode med Maven

1. Oversigt

Normalt udfører vi test under en Maven-build ved hjælp af Maven surefire plugin.

Denne vejledning vil undersøge, hvordan du bruger dette plugin til at køre en enkelt testklasse eller testmetode.

2. Introduktion til problemet

Maven surefire plugin er let at bruge. Den har kun ét mål:test .

Derfor, med standardkonfigurationen kan vi udføre alle tests i projektet med kommandoen mvn test .

Nogle gange vil vi måske udføre en enkelt testklasse eller endda en enkelt testmetode.

I dette selvstudie tager vi JUnit 5 som eksempel på testudbyderen for at se på, hvordan man opnår det.

3. Eksempelprojektet

For at vise testresultaterne på en mere ligetil måde, lad os oprette et par simple testklasser:

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");
    }
}

I TheFirstUnitTest klasse, har vi kun én testmetode. Men TheSecondUnitTest indeholder fire testmetoder. Alle vores metodenavne følger "when...then... ” mønster.

For at gøre det enkelt har vi lavet hver testmetode til at udlæse en linje, der angiver, at metoden kaldes.

Hvis vi nu kører mvn test , vil alle test blive udført:

$ 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] 
 ...

Lad os derefter bede Maven om kun at udføre specificerede tests.

4. Udfør en enkelt testklasse

Maven surefire plugin giver en test parameter, som vi kan bruge til at specificere testklasser eller metoder, vi ønsker at udføre.

Hvis vi ønsker at udføre en enkelt testklasse, kan vi udføre kommandoen mvn test -Dtest=”TestClassName” .

For eksempel kan vi bestå -Dtest="TheFirstUnitTest" til mvn kommandoen for at udføre TheFirstUnitTest kun klasse:

$ 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
 ...

Som outputtet viser, er det kun testklassen, vi har bestået til testen parameter udføres.

5. Udfør en enkelt testmetode

Derudover kan vi bede Maven surefire-pluginnet om at udføre en enkelt testmetode ved at sende -Dtest=”TestClassName#TestMethodName”  til mvn kommando.

Lad os nu udføre whenTestCase2_thenPrintTest2_1() metoden i TheSecondUnitTest klasse:

$ 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
...

Som vi kan se, har vi denne gang kun udført den specificerede testmetode.

6. Mere om testen Parameter

Indtil videre har vi vist, hvordan man udfører en enkelt testklasse eller testmetode ved at levere testen parameterværdi i overensstemmelse hermed.

Faktisk giver Maven surefire-plugin'et os mulighed for at indstille værdien af ​​testen parameter i forskellige formater for at udføre tests fleksibelt.

Dernæst viser vi nogle almindeligt anvendte formater:

  • Udfør flere testklasser efter navn:-Dtest="TestClassName1, TestClassName2, TestClassName3..."
  • Udfør flere testklasser efter navnemønster:-Dtest="*ServiceUnitTest" eller -Dtest=”The*UnitTest, Controller*Test”
  • Angiv flere testmetoder efter navn:-Dtest="ClassName#method1+method2"
  • Angiv flere metodenavne efter navnemønster:-Dtest="ClassName#whenSomethingHappens_*"

Lad os endelig se endnu et eksempel.

Lad os sige, at vi kun ønsker at udføre alle "whenTestCase1... ” metoder i TheSecondUnitTest klasse.

Så efter det mønster, vi har talt om ovenfor, håber vi, at -Dtest=”TheSecondUnitTest#whenTestCase1*” vil gøre jobbet:

$ 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
...

Som vi forventede, er kun de tre testmetoder, der matcher det angivne navnemønster, blevet udført.

7. Konklusion

Maven surefire-pluginnet giver en test parameter, der giver os stor fleksibilitet til at vælge, hvilke test vi vil udføre.

I denne artikel har vi diskuteret nogle almindeligt anvendte værdiformater for testen parameter.

Vi har også behandlet gennem eksempler, hvordan man kun kører specificerede testklasser eller testmetoder med Maven.

Som altid kan koden til artiklen findes på GitHub.


Java tag