TestNG explained

TestNG
Developer:Cédric Beust, the TestNG team
Latest Release Version:7.6.1
Latest Release Date:[1]
Programming Language:Java
Operating System:Cross-platform
Genre:Unit testing tool
License:Apache License 2.0[2]

TestNG is a testing framework for the Java programming language created by Cedric_Beust and inspired by JUnit and NUnit. The design goal of TestNG is to cover a wider range of test categories: unit, functional, end-to-end, integration, etc., with more powerful and easy-to-use functionalities.

Features

TestNG's main features include:

  1. Annotation support.
  2. Support for data-driven/parameterized testing (with @DataProvider and/or XML configuration).
  3. Support for multiple instances of the same test class (with @Factory)
  4. Flexible execution model. TestNG can be run either by Ant via build.xml (with or without a test suite defined), or by an IDE plugin with visual results. There isn't a TestSuite class, while test suites, groups and tests selected to run are defined and configured by XML files.
  5. Concurrent testing: run tests in arbitrarily big thread pools with various policies available (all methods in their own thread, one thread per test class, etc.), and test whether the code is multithread safe.
  6. Embeds BeanShell for further flexibility.
  7. Default JDK functions for runtime and logging (no dependencies).
  8. Dependent methods for application server testing.
  9. Distributed testing: allows distribution of tests on slave machines.

Data provider

A data provider in TestNG is a method in a test class, which provides an array of varied actual values to dependent test methods.

Example:

//This method will provide data to any test method that declares that its Data Provider is named "provider1". @DataProvider(name = "provider1") public Object[][] createData1

// This test method declares that its data should be supplied by the Data Provider named "provider1". @Test(dataProvider = "provider1") public void verifyData1(String n1, Integer n2)

// A data provider which returns an iterator of parameter arrays. @DataProvider(name = "provider2") public Iterator createData

// A data provider with an argument of the type java.lang.reflect.Method. // It is particularly useful when several test methods use the same // provider and you want it to return different values depending on // which test method it is serving. @DataProvider(name = "provider3") public Object[][] createData(Method m)

The returned type of a data provider can be one of the following two types:

Tool support

TestNG is supported, out-of-the-box or via plug-ins, by each of the three major Java IDEs - Eclipse, IntelliJ IDEA, and NetBeans. It also comes with a custom task for Apache Ant and is supported by the Maven build system. The Hudson continuous integration server has built-in support for TestNG and is able to track and chart test results over time. Most Java code coverage tools, such as Cobertura, work seamlessly with TestNG.

Note: TestNG support for Eclipse is only embedded in the Eclipse Marketplace for Eclipse versions up to 2018-09 (4.9). For later versions of Eclipse, TestNG must be manually installed as per instructions in the TestNG site.[3]

Reporting

TestNG generates test reports in HTML and XML formats. The XML output can be transformed by the Ant JUnitReport task[4] to generate reports similar to those obtained when using JUnit. Since version 4.6, TestNG also provides a reporter API[5] that permits third-party report generators, such as ReportNG,[6] PDFngreport[7] and TestNG-XSLT,[8] to be used.

Comparison with JUnit

TestNG has a longstanding rivalry with another testing tool JUnit. Each framework has differences and respective advantages. Stack Overflow discussions reflect this controversy.[9] [10] [11]

Annotations

In JUnit 5, the @BeforeAll and @AfterAll methods have to be declared as static in most circumstances.[12] TestNG does not have this constraint.

TestNG includes four additional setup/teardown annotation pairs for the test suite and groups: @BeforeSuite, @AfterSuite, @BeforeTest, @AfterTest, @BeforeGroup and @AfterGroup, @BeforeMethod and @AfterMethod.TestNG also provides support to automate testing an application using selenium.

Parameterized testing

Parameterized testing is implemented in both tools, but in quite different ways.

TestNG has two ways for providing varying parameter values to a test method: by setting the testng.xml, and by defining a @DataProvider method.[13]

In JUnit 5, the @ParameterizedTest annotation allows parameterized testing. This annotation is combined with another annotation declaring the source of parameterized arguments, such as @ValueSource or @EnumSource. Using @ArgumentsSource allows the user to implement a more dynamic ArgumentsProvider.[14] In JUnit 4, @RunWith and @Parameters are used to facilitate parameterized tests, where the @Parameters method has to return a List[] with the parameterized values, which will be fed into the test class constructor.

Conclusion

Different users often prefer certain features of one framework or another. JUnit is more widely popular and often shipped with mainstream IDEs by default. TestNG is noted for extra configuration options and capability for different kinds of testing. Which one more suitable depends on the use context and requirements.

See also

External links

Notes and References

  1. https://github.com/cbeust/testng/releases | Project GitHub releases page
  2. Web site: Apache License Version 2.0 . January 2004 . dead . https://web.archive.org/web/20131221232410/http://testng.org/license/ . 2013-12-21 .
  3. Web site: TestNG for Eclipse .
  4. http://ant.apache.org/manual/OptionalTasks/junitreport.html JUnitReport
  5. Web site: Announcing TestNG 4.6 . 2010-03-04 . 2010-12-12 . https://web.archive.org/web/20101212150840/http://beust.com/weblog2/archives/000371.html . dead .
  6. http://blog.uncommons.org/2009/11/02/reportng-1-0-final-released/ ReportNG 1.0 Final Released
  7. https://uttesh.github.io/pdfngreport/ PDFngreport 1.0.0
  8. https://code.google.com/p/testng-xslt/ TestNG XSL Reports
  9. Web site: Junit vs TestNG . stackoverflow.com.
  10. Web site: JUnit vs TestNG . stackoverflow.com . dead . https://web.archive.org/web/20140202131938/http://stackoverflow.com/questions/3438785/junit-vs-testng . 2014-02-02 .
  11. Web site: Which UnitTest framework to learn for Java now? . stackoverflow.com.
  12. Web site: Writing Tests - Annotations . junit.org.
  13. Web site: What is TestNG? . qacreators.com.
  14. Web site: JUnit 5 User Guide . junit.org.