I wanted to invoke testng programmatically. Not eclipse plug-in.
I have associated \"testng-6.8.21.jar\" and running through eclipse and i ran below code:
If you use a Maven project, you need add this dependancy:
<dependency>
<groupId>com.beust</groupId>
<artifactId>jcommander</artifactId>
<version>1.48</version>
</dependency>
the class com/beust/jcommander/ParameterException is inside
If you use a project without Maven you need add this jar file at your classpath:
jcommander-1.48.jar
You can download this jar file on central.maven.org -> jcommander-1.48.jar
Change:
Class cls = Class.forName("TestSuite.TestCases.AddContactHappyPath").getClass();
test.setTestClasses(new Class[] { cls });
By:
test.setTestClasses(new Class[] { AddContactHappyPath.class });
All code is
import org.testng.TestNG;
import com.xxx.test.others.AddContactHappyPath;
public class SampCls {
public static void main(String[] args) throws ClassNotFoundException {
TestNG test = new TestNG();
test.setTestClasses(new Class[] { AddContactHappyPath.class });
test.run();
}
}
TestNG code is:
import org.testng.annotations.*;
public class AddContactHappyPath {
@Test()
public void AddContactHappyPathTest() {
System.out.println("hello world");
}
}
Console result:
[TestNG] Running:
Command line suite
hello world
===============================================
Command line suite
Total tests run: 1, Failures: 0, Skips: 0
===============================================
Solution for me was to install TestNg. I referred this link here. As I was using latest version of eclipse, Eclipse MarketPlace option didn't work for me, if it works for you then great. Else goto Help -> Install new software and work with http://dl.bintray.com/testng-team/testng-eclipse-release/ After installation refer 1st link I mentioned to continue. All the best !!
As @sgrillon correctly pointed out, you need the correct Maven dependency, but also the shade plugin (https://maven.apache.org/plugins/maven-shade-plugin) to package a Uber-jar including all Maven dependencies for easy execution.
This is what should be included in your pom.xml
:
...
<dependencies>
<dependency>
<groupId>com.beust</groupId>
<artifactId>jcommander</artifactId>
<version>1.48</version>
</dependency>
</dependencies>
...
<plugins>
...
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.3</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<shadedArtifactAttached>true</shadedArtifactAttached>
<shadedClassifierName>runnable</shadedClassifierName>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
After you build the Maven package, you'll get your regular my-app-1.0-SNAPSHOT.jar
file and also a my-app-1.0-SNAPSHOT-runnable.jar
.
This is what you should run, with the command:
$ java -jar my-app-1.0-SNAPSHOT-runnable.jar
You can verify with this command:
$ jar tvf my-app-1.0-SNAPSHOT-runnable.jar
that the shaded jar contains the JCommander classes (and those of all the other Maven dependencies), while the regular one doesn't.