Swiftorial Logo
Home
Swift Lessons
Tutorials
Learn More
Career
Resources

TestNG Tutorial

Introduction to TestNG

TestNG is a testing framework inspired by JUnit and NUnit, designed to cover a broader range of testing categories: unit, functional, end-to-end, integration, and more. It provides a powerful way to write tests in a more flexible manner, and supports data-driven testing through parameterization.

Setting Up TestNG

To start using TestNG, you need to include it in your project. If you're using Maven, add the following dependency to your pom.xml:

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

If you're not using Maven, you can download the TestNG jar file from the official website and add it to your classpath.

Creating Your First Test

To create a simple TestNG test, follow these steps:

  1. Create a new Java class.
  2. Annotate your test method with @Test.

Here's a basic example:

import org.testng.annotations.Test;

public class SimpleTest {
    @Test
    public void testMethod() {
        System.out.println("Hello, TestNG!");
    }
}
                

Running Tests

You can run TestNG tests in several ways. If you are using an IDE like Eclipse or IntelliJ IDEA, right-click on your test class and select Run As -> TestNG Test. You can also run tests from the command line using Maven:

mvn test
            

TestNG Annotations

TestNG provides several annotations that can be used to control the execution of tests:

  • @BeforeSuite: Executed before the entire suite.
  • @AfterSuite: Executed after the entire suite.
  • @BeforeClass: Executed before the first method in the current class is invoked.
  • @AfterClass: Executed after all the methods in the current class have been invoked.
  • @Test: Marks a method as a test method.

Here's an example using multiple annotations:

import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;

public class AnnotationsExample {
    @BeforeClass
    public void setUp() {
        System.out.println("Setting up the test environment...");
    }

    @Test
    public void testOne() {
        System.out.println("Executing Test One");
    }

    @Test
    public void testTwo() {
        System.out.println("Executing Test Two");
    }

    @AfterClass
    public void tearDown() {
        System.out.println("Cleaning up after tests...");
    }
}
                

Data-Driven Testing

TestNG supports data-driven testing through the @DataProvider annotation. This allows you to run the same test with different sets of data:

import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

public class DataDrivenTest {
    @DataProvider(name = "data-provider")
    public Object[][] dataProviderMethod() {
        return new Object[][] {
            { "data1" },
            { "data2" },
            { "data3" }
        };
    }

    @Test(dataProvider = "data-provider")
    public void testMethod(String data) {
        System.out.println("Data received: " + data);
    }
}
                

TestNG Reports

TestNG generates reports automatically after the tests are executed. By default, you will find the reports in the test-output directory in your project. The reports contain information about the tests that were run, including passed, failed, and skipped tests.

Conclusion

TestNG is a powerful testing framework that makes it easy to write and manage tests in Java applications. With features like annotations, data providers, and built-in reports, it is a great choice for both unit and functional testing. Experiment with the examples provided and explore more advanced features to enhance your testing strategy.