Saturday, September 28, 2019

Post#125.Exception Test in TestNG


TestNG – Expected Exception and Expected Message 

While writing unit tests there can be certain scenarios where we need to verify that an exception is being thrown by the program during execution or not. TestNG provides a feature to test such scenarios by allowing the user to specify the type of exceptions that are expected to be thrown by a test method during execution.

It supports multiple values being provided for verification.
If the exception thrown by the test is not part of the user entered list, the test method will be marked as failed.
Let’s create a sample test and learn how exception test works in TestNG.
@Test ( expectedExceptions = { IOException.class, NullPointerException.class } )
Let’s see an example to understand it better.
In below test, we have two test methods i.e. TC001() and TC002().In both the methods it will throws an exception called “ArithmeticException” when dividing two numbers with denominator value as 0.

package TestNGException;
import java.io.IOException;
import org.testng.annotations.Test;

public class TestNGException {
            @Test(expectedExceptions=ArithmeticException.class)
            public void TC001(){
                        int e = 1/0;
            }
           
            @Test(expectedExceptions = { IOException.class, NullPointerException.class })
            public void TC002(){
                        int e = 1/0;
            }
}

 Output of above test run is given below:
[TestNG] Running:
C:\Users\Sujoy\AppData\Local\Temp\testng-eclipse-1037333163\testng-customsuite.xml

PASSED: TC001
FAILED: TC002
When we execute the above code, the test method "TC001" will return as “Passed” as we are handling the exceptions and the Test Method "TC002" will return output as "Failed" with exception as '“java.lang.ArithmeticException: / by zero”

Example of Expected Exception Test with Verifying Message

You can also verify a test based on the exception message that was thrown by the test. Regular expression can also be used to verify the error message, this can be done using .*. Depending upon the position of the regular expression we can use it to do pattern matching such as starts-with, contains, and ends-with while verifying the exception message.
Let’s learn how to write an exception test based on the exception message thrown.
package TestNGException;
import java.io.IOException;
import org.testng.annotations.Test;

public class TestNGException {
            @Test(expectedExceptions = { IOException.class }, expectedExceptionsMessageRegExp = "Pass Message test")
    public void exceptionTestOne() throws Exception {
        throw new IOException("Pass Message test");
    }

    @Test(expectedExceptions = { IOException.class }, expectedExceptionsMessageRegExp = ".* Message .*")
    public void exceptionTestTwo() throws Exception {
        throw new IOException("Pass Message test");
    }

    @Test(expectedExceptions = { IOException.class }, expectedExceptionsMessageRegExp = "Pass Message test")
    public void exceptionTestThree() throws Exception {
        throw new IOException("Fail Message test");
    }

}

Output of above test run is given below:

[TestNG] Running:
  C:\Users\Sujoy\AppData\Local\Temp\testng-eclipse--1391524594\testng-customsuite.xml

PASSED: exceptionTestOne
PASSED: exceptionTestTwo
FAILED: exceptionTestThree
In above test methods exceptionTestThree() failed because expected message didn’t matched.

No comments:

Post a Comment