Java/Maven

JUnit Testing Under Maven2

JUnit testing provides an easy to use flexible framework to write unit tests for Java code. Maven incorporates this functionality as part of it’s software life cycle. JUnit plug-in under maven2 is called Surefire.


> mvn test

Putting the above on the command line will compile the test code and run it.This is really convenient when testing someones code or if you are willing to test everything.

Single Test

However if you are the developer and are working on one specific feature tested in one test case you can run:


> mvn -Dtest=MyTestCase test

This will compile all the tests, but will run only the specified one.

Multiple Selected Tests

Sometimes you want to run just a selected set of tests. For example 2 out of 50:


> mvn -Dtest=MyTestCase,MyOtherTestCase test

This will compile all the tests, but will run only the specified two tests.

Wild Cards

You can use ‘*’ in the anywhere in the name of the class. However be careful if you have inner classes as for example My* will match MyTestCase and MyTestCase$1, which is the inner class you have used in the code, but it is not really a test and therefore the build will fail. Link to Documentation .

Cleaning

However what happens if you have discovered a bug or for some other reason edited the functional code (the one you are testing)? You will be surprised, but maven will not pick it up and will continue the old version of the compiled code. To make it compile the entire sub-project you should first clean it.


> mvn clean -Dtest=MyTestCase test

This will clean your target/ directory and therefore get rid of the old compilations. Then it will recompile the whole project along with the testing code, but still run only MyTestCase.

Abstract Tests

Before Maven 2.0.8 test cases starting with a word Abstract were not considered to be real tests. Abstract Tests are usually used if you have some testing code, which is common for 2 test cases. Then you would write an Abstract*Test class and extend it by the 2 test cases. The inheritance allows you to have the code in one place, but Abstract tests are not really test cases, so they should not be run. This changed with the new version. Excludes property contains the patterns of names, which should be excluded from testing. With its help you can remove the Abstract tests again if your project relies on it.In your pom.xml you should add:


  <build>

    <plugins>

      <!-- Added test excludes for Abstract -->
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-surefire-plugin</artifactId>
          <configuration>
            <excludes>
              <exclude>**/Abstract*</exclude>
            </excludes>
          </configuration>
      </plugin>

      <!-- ....... other configuration ....... -->

    </plugins>
  </build>

Standard

2 thoughts on “JUnit Testing Under Maven2

  1. Pingback: Revue de presse semaine 21 - Espace de fouille

Leave a comment