How to use TestNG with Maven and Eclipse

Earlier, we had seen how to use JUNIT for unit testing. TestNG is another such unit testing framework. In this article, we will be learning how to use TestNG with Maven and Eclipse.

TestNG Overview

TestNG is a very powerful unit testing framework. Not only does it allow creating and running tests, but it has many advanced features like generating test reports, parameterizing tests, and much more. Let us now learn how to use TestNG to test a simple Java program.

Project Creation and Setup

 Step 1 – Create a new Maven Project (Refer to this blog post). This should create a project as shown below:

Step 2 – Add the TestNG dependencies (You can refer to this blog post). Alternatively, you can add the following to your pom.xml file:

<dependency>  <groupId>org.testng</groupId>  <artifactId>testng</artifactId>  <version>6.8</version>  <scope>test</scope></dependency>

Writing and Running Code

Step 3 – Write code to be tested.  Suppose, you have a class as follows:

public class Calculator {    public int add(int num1,int num2) {    return num1+num2;  }    public int subtract(int num1, int num2) {    return num1-num2;  }}

This is a simple Java class. It has two methods add and subtract.

Step 4: Write test class. You can now create a Test class as follows:

public class CalculatorTest {@Testpublic void testAdd(){int num1=10;int num2=20;Calculator cal = new Calculator();int sum = cal.add(num1, num2);assertEquals(30, sum);}@Testpublic void testSubtract(){int num1=10;int num2=20;Calculator cal = new Calculator();int diff = cal.subtract(num1, num2);assertEquals(-10, diff);}}

We have now created a CalculatorTest class.  The testAdd method tests the Calculator.add method while the testSubtract method tests the Calculator.substract method. Both methods have the @Test annotation specified. This annotation indicates that the method needs to be executed as a TestNG test. Both methods use the assertEquals method to verify the test result.

Step 5: Executing the test. You can execute the test in Eclipse by right-clicking on the test method/test class and clicking on Run As -> TestNG Test as shown below:

 

A successful test displays the following output:

A failed test displays the following output:

Refactoring the code

TestNG includes several other annotations that help to optimize the test code. For example, in the code above, both the testAdd and testSubtract methods create a Calculator object.  For a simple example like this, it does not matter much. However, sometimes object creation can be an expensive operation and you would want to create only one instance of the object and use it in all the tests. TestNG supports a @BeforeClass annotation. When specified on a method, the method is executed only once before all the tests.  So, the code above can be rewritten using the @BeforeClass annotation as follows:

public class CalculatorTest {    private Calculator cal;    @BeforeClass  public void beforeMethod() {    cal = new Calculator();  }    @Test  public void testAdd(){    int num1=10;    int num2=20;    int sum = cal.add(num1, num2);    assertEquals(30, sum);  }    @Test  public void testSubtract(){    int num1=10;    int num2=20;    int diff = cal.subtract(num1, num2);    assertEquals(-10, diff);  }}

You can download the complete source code for this example from my Github repository.

Further Reading

Conclusion

So, in this article, we learned about TestNG and some of its annotations. We also saw how to use TestNG with Maven and Eclipse.

Comments

Popular posts from this blog

How to use logging in SpringBoot with code samples

Python While Loop with code samples

How to convert a List to a Set