TestNG testing framework - Introduction
Tags: testing, testng, bugs, defect
Published: 2022-05-08 12:13:41

![TestNG logo](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6qhmpxoly7ujuasiulgn.png)
 
---

### What is a Testing Framework?

A testing framework is a set of guidelines or rules used for creating and designing test cases. A framework is comprised of a combination of practices and tools that are designed to help QA professionals test more efficiently.

---

**Popular available options:**

1. JUnit
2. NUnit
3. TestNG

---

### Why TestNG?

TestNG is a testing framework inspired by JUnit and NUnit but introduces some new functionalities that make it more powerful and easier to use, such as:

- Annotations.
- Run your tests in arbitrarily big thread pools with various policies available (all methods in their thread, one thread per test class, etc…).
- Test that your code is multithread safe.
- Flexible test configuration.
- Support for data-driven testing (with @DataProvider).
- Support for parameters.
- Powerful execution model (no more TestSuite).
- Supported by a variety of tools and plug-ins (Eclipse, IDEA, Maven, etc…).
- Embeds BeanShell for further flexibility.
- Default JDK functions for runtime and logging (no dependencies).
- Dependent methods for application server testing.
TestNG is designed to cover all categories of tests: unit, functional, end-to-end, integration, etc…

---

### Annotations in TestNG

![Annotations](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qc027lbsg5gmgo24mcnn.png)

---

### Assertions
Assertions in TestNG are a way to verify that the expected result and the actual result match or not.

- **Expected Result**: expected outcome at a point in time while testing application.
- **Actual Result**: actual outcome at a point in time while testing application.

example:
```
Assert.assertEquals(actualOutcome,expectedOutcome);
```
### Types Of Assertions
**Hard Assertion**: Hard Asserts are those asserts that stop the test execution when an assert statement fails, and the subsequent assert statements are therefore not validated.
**Soft Assertions**: In soft asserts, the subsequent assertions keep on running even though one assert validation fails, i.e., the test execution does not stop.

Example:
```
# Hard Assert
Assert.assertEquals(actualResult,expectedResult);
# Soft Assert
SoftAssert softassert = new SoftAssert();
softassert.assertEquals(actualResult, expecetedResult);
softassert.assertAll();
```

---
### Example Usage

**pom.xml**
```
<dependency>
    <groupId>org.testng</groupId>
    <artifactId>testng</artifactId>
    <version>7.5</version>
</dependency>
```

**code**

only **@Test** annotated methods are called test should hold test scripts, whereas **@BeforeMethod/@AfterMethod** methods should be used for setting up prerequisites & cleaning up for each tests.

```
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;

public class Runner {
    @BeforeTest
    public void beforeTest(){
        System.out.println("method to be executed before test");
    }

    @Test
    public void test(){
        System.out.println("test method");
    }

    @AfterTest
    public void afterTest(){
        System.out.println("method to be executed after test");
    }
}

```

**output:**
```
method to be executed before test
test method
method to be executed after test
===============================================
Default Suite
Total tests run: 1, Passes: 1, Failures: 0, Skips: 0
===============================================
```

---

### Few useful URLs:

[TestNG webpage](https://testng.org/doc/)
[Javatpoint tutorial](https://www.javatpoint.com/testng-tutorial)