Run a single test method with maven

JavaMavenUnit TestingMaven 2Maven 3

Java Problem Overview


I know you can run all the tests in a certain class using:

mvn test -Dtest=classname

But I want to run an individual method and -Dtest=classname.methodname doesn't seem to work.

Java Solutions


Solution 1 - Java

To run a single test method in Maven, you need to provide the command as:

mvn test -Dtest=TestCircle#xyz test

where TestCircle is the test class name and xyz is the test method.

Wild card characters also work; both in the method name and class name.

If you're testing in a multi-module project, specify the module that the test is in with -pl <module-name>.

For integration tests use it.test=... option instead of test=...:

mvn -pl <module-name> -Dit.test=TestCircle#xyz integration-test

Solution 2 - Java

There is an issue with surefire 2.12. This is what happen to me changing maven-surefire-plugin from 2.12 to 2.11:

  1. mvn test -Dtest=DesignRulesTest >Result:
    [ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.12:test (default-test) on project pmd: No tests were executed!

  2. mvn test -Dtest=DesignRulesTest >Result: [INFO] --- maven-surefire-plugin:2.11:test (default-test) @ pmd --- ... Running net.sourceforge.pmd.lang.java.rule.design.DesignRulesTest Tests run: 5, Failures: 0, Errors: 0, Skipped: 4, Time elapsed: 4.009 sec

Solution 3 - Java

What I do with my TestNG, (sorry, JUnit doesn't support this) test cases is I can assign a group to the test I want to run

@Test(groups="broken")

And then simply run 'mvn -Dgroups=broken'.

Solution 4 - Java

Running a set of methods in a Single Test Class With version 2.7.3, you can run only n tests in a single Test Class.

NOTE : it's supported for junit 4.x and TestNG.

You must use the following syntax

mvn -Dtest=TestCircle#mytest test

You can use patterns too

mvn -Dtest=TestCircle#test* test

As of surefire 2.12.1, you can select multiple methods (JUnit4X only at this time, patches welcome)

mvn -Dtest=TestCircle#testOne+testTwo test

Check this link about single tests

Solution 5 - Java

You can run specific test class(es) and method(s) using the following syntax:

> 1. full package : mvn test -Dtest="com.oracle.tests.**" >
> 2. all method in a class : mvn test -Dtest=CLASS_NAME1 >
> 3. single method from single class :mvn test -Dtest=CLASS_NAME1#METHOD_NAME1 > > 4. multiple method from multiple class : mvn test -Dtest=CLASS_NAME1#METHOD_NAME1,CLASS_NAME2#METHOD_NAME2

Solution 6 - Java

This command works !! mvn "-DTest=JoinTeamTestCases#validateJoinTeam" test Note that "-DTest" starts with UPPER CASE 'T'.

Solution 7 - Java

Run a single test method from a test class.

mvn test -Dtest=Test1#methodname


  • mvn test // Run all the unit test classes

  • mvn test -Dtest=Test1 // Run a single test class

  • mvn test -Dtest=Test1,Test2 // Run multiple test classes

  • mvn test -Dtest=Test1#testFoo* // Run all test methods that match pattern 'testFoo*' from a test class.

  • mvn test -Dtest=Test1#testFoo*+testBar* // Run all test methods match pattern 'testFoo*' and 'testBar*' from a test class.

Solution 8 - Java

I tried several solutions provided in this thread, however they were not working for module which depends on a different one. In that case I had to run mvn from the root-module with additional parameters: -am (--also-make), which tells maven to built modules which your test module depends on and -DfailIfNoTests=false, otherwise "No tests were executed!" error appears.

mvn test -pl B -Dtest=MyTestClass#myTest -am -DfailIfNoTests=false

pom.xml section in root:

<modules>
    <module>A</module>
    <module>B</module>
<modules>

B depends on A.

Solution 9 - Java

The test parameter mentioned by tobrien allows you to specify a method using a # before the method name. This should work for JUnit and TestNG. I've never tried it, just read it on the Surefire Plugin page:

> Specify this parameter to run individual tests by file name, overriding the includes/excludes parameters. Each pattern you specify here will be used to create an include pattern formatted like **/${test}.java, so you can just type "-Dtest=MyTest" to run a single test called "foo/MyTest.java". This parameter overrides the includes/excludes parameters, and the TestNG suiteXmlFiles parameter. since 2.7.3 You can execute a limited number of method in the test with adding #myMethod or #my*ethod. Si type "-Dtest=MyTest#myMethod" supported for junit 4.x and testNg

Solution 10 - Java

New versions of JUnit contains the Categories runner: http://kentbeck.github.com/junit/doc/ReleaseNotes4.8.html

But releasing procedure of JUnit is not maven based, so maven users have to put it manually to their repositories.

Solution 11 - Java

As of surefire plugin version 2.22.1 (possibly earlier) you can run single test using testnames property when using testng.xml

Given a following testng.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite">
	<test name="all-tests">
		<classes>
			<class name="server.Atest"/>
			<class name="server.Btest"/>
			<class name="server.Ctest"/>
		</classes>
	</test>
	<test name="run-A-test">
		<classes>
			<class name="server.Atest"/>
		</classes>
	</test>
	<test name="run-B-test">
		<classes>
			<class name="server.Btest"/>
		</classes>
	</test>
	<test name="run-C-test">
		<classes>
			<class name="server.Ctest"/>
		</classes>
	</test>
</suite> 

with the pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	[...]
	<properties>
		<selectedTests>all-tests</selectedTests>
	</properties>
	[...]
	<plugins>
		<plugin>
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-surefire-plugin</artifactId>
			<version>2.22.1</version>
			<configuration>
				<suiteXmlFiles>
					<file>src/test/resources/testng.xml</file>
				</suiteXmlFiles>
				<properties>
					<property>
						<name>testnames</name>
						<value>${selectedTests}</value>
					</property>
				</properties>
			</configuration>
		</plugin>
	</plugins>
	[...]
</project>

From command line

mvn clean test -DselectedTests=run-B-test

Further reading - Maven surefire plugin using testng

Solution 12 - Java

First you need to clean your maven project

mvn clean

then you can run specific file and function using

mvn test -Dtest=testClassName#testCaseName

Solution 13 - Java

You need to specify the JUnit test class and its method to be executed.

mvn test -Dtest=com.mycompany.AppTest#testMethod

https://metamug.com/article/java/build-run-java-maven-project-command-line.html#running-unit-tests

Solution 14 - Java

You can run a single test class, but not a single method within a test class. You use the simple name of the class not the fully-qualified name of the class. So, if you have a test in "org.sonatype.test.MyTest" and that is the only test you want to run, your command line would look like this:

mvn test -Dtest=MyTest

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionBillManView Question on Stackoverflow
Solution 1 - JavaMudit SrivastavaView Answer on Stackoverflow
Solution 2 - JavaDuccio FabbriView Answer on Stackoverflow
Solution 3 - JavatunaranchView Answer on Stackoverflow
Solution 4 - JavaPrasanth Kumar DiddiView Answer on Stackoverflow
Solution 5 - JavaNazmul Hoque ShafinView Answer on Stackoverflow
Solution 6 - JavavikasView Answer on Stackoverflow
Solution 7 - JavaAmitView Answer on Stackoverflow
Solution 8 - JavajwpolView Answer on Stackoverflow
Solution 9 - JavaWesley HartfordView Answer on Stackoverflow
Solution 10 - JavaAndriy PlokhotnyukView Answer on Stackoverflow
Solution 11 - JavabskView Answer on Stackoverflow
Solution 12 - JavadeirdreamuelView Answer on Stackoverflow
Solution 13 - JavaSorterView Answer on Stackoverflow
Solution 14 - JavaTim O'BrienView Answer on Stackoverflow