TestNG: How to test for mandatory exceptions?
@Test(expectedExceptions)
is useful for the most common cases:
- You expect a specific exception to be thrown
- You need the message of that exception to contain specific words
Per the documentation a test will fail if no expectedException
is thrown:
The list of exceptions that a test method is expected to throw. If no exception or a different than one on this list is thrown, this test will be marked a failure.
Here are a few scenarios where @Test(expectedExceptions)
is not sufficient:
- Your test method has several statements and only one of them is expected to throw
- You are throwing your own type of exception and you need to make sure it matches a certain criterion
In such cases, you should just revert to the traditional (pre-TestNG) pattern:
try {
// your statement expected to throw
fail();
}
catch(<the expected exception>) {
// pass
}
Use @Test
annotation to check expected exceptions.
@Test(
expectedExceptions = AnyClassThatExtendsException.class,
expectedExceptionsMessageRegExp = "Exception message regexp"
)
Or if you don't want to check for exception message, only below is enough
@Test(expectedExceptions = AnyClassThatExtendsException.class)
In that way, you don't need to use ugly try catch block, just invoke you exception-thrower method inside the test.