Prevent unit tests but allow integration tests in Maven

前端 未结 7 795
無奈伤痛
無奈伤痛 2020-11-29 14:50

I\'ve a Maven build in which I use the SureFire plugin to run some unit tests, and the FailSafe plugin to run some integration tests. I would like a way to run just the Fai

相关标签:
7条回答
  • 2020-11-29 15:25

    Try running your integration or unit tests in a separate profile. Then you can just enable/disable the profile.

    0 讨论(0)
  • 2020-11-29 15:27

    A workaround would be to call:

    mvn clean test-compile failsafe:integration-test
    

    Admittedly, this is ugly, but it may solve your problem.


    Or (another hack):

    mvn clean integration-test -Dtest=SomePatternThatDoesntMatchAnything -DfailIfNoTests=false
    

    Reference:

    • surefire:test#test
    • surefire:test#failIfNoTests
    0 讨论(0)
  • 2020-11-29 15:37

    Hope this helps!

    Try to run test only with FailSafe (plugin for integration-test - it will allow you to run only integration tests with this kind naming, by default: */IT.java, **/IT.java, */*ITCase.java; , but you can easily change that from pom file)

    mvn failsafe:integration-test
    

    And when you want to use only SureFire (plugin for unit-testing)

    mvn surefire:test
    

    or one test at a time with:

    mvn -Dtest=MyUnitlTest
    
    0 讨论(0)
  • 2020-11-29 15:39

    To expand on comments from @danidemi and @GuillaumeHusta:

    FYI : skipTests is now deprecated in Failsafe Plugin 3.0.0-M3 (SUREFIRE-1611)

    So to skip unit tests, but not integration tests, you can do this if you're using the latest version of the Failsafe plugin:

    mvn verify -DskipTests
    

    (please give the mentioned comments an upvote if this helps you)

    0 讨论(0)
  • 2020-11-29 15:40

    I do like this so every phases are normally executed:

     mvn -Dtest=foo -DfailIfNoTests=false verify
    
    0 讨论(0)
  • 2020-11-29 15:44

    I found the simplest way to skip only surefire tests is to configure surefire (but not failsafe) as follows:

    <plugin>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.14</version>
        <configuration>
            <!-- skips surefire tests without skipping failsafe tests.
                     Property value seems to magically default to false -->
            <skipTests>${skip.surefire.tests}</skipTests>
        </configuration>
    </plugin>
    

    This allows you to run mvn verify -Dskip.surefire.tests and only surefire, not failsafe, tests will be skipped; it will also run all other necessary phases including pre-integration and post-integration, and will also run the verify goal which is required to actually fail your maven build if your integration tests fail.

    Note that this redefines the property used to specify that tests should be skipped, so if you supply the canonical -DskipTests=true, surefire will ignore it but failsafe will respect it, which may be unexpected, especially if you have existing builds/users specifying that flag already. A simple workaround seems to be to default skip.surefire.tests to the value of skipTests in your <properties> section of the pom:

    <properties>
        <skip.surefire.tests>${skipTests}</skip.surefire.tests>
    </properties>
    

    If you need to, you could provide an analagous parameter called skip.failsafe.tests for failsafe, however I haven't found it necessary - because unit tests usually run in an earlier phase, and if I want to run unit tests but not integration tests, I would run the test phase instead of the verify phase. Your experiences may vary!

    These skip.(surefire|failsafe).tests properties should probably be integrated into surefire/failsafe code itself, but I'm not sure how much it would violate the "they're exactly the same plugin except for 1 tiny difference" ethos.

    0 讨论(0)
提交回复
热议问题