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.
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.
You can run specific test class(es) and method(s) using the following syntax:
full package : mvn test -Dtest="com.oracle.tests.**"
all method in a class : mvn test -Dtest=CLASS_NAME1
single method from single class :mvn test -Dtest=CLASS_NAME1#METHOD_NAME1
multiple method from multiple class : mvn test -Dtest=CLASS_NAME1#METHOD_NAME1,CLASS_NAME2#METHOD_NAME2
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.
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.
First you need to clean your maven project
mvn clean
then you can run specific file and function using
mvn test -Dtest=testClassName#testCaseName
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
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