Fix #773 Test should not be skipped when the exception is expected
diff --git a/src/main/java/org/testng/internal/Invoker.java b/src/main/java/org/testng/internal/Invoker.java
index f3a1eeb..5271465 100644
--- a/src/main/java/org/testng/internal/Invoker.java
+++ b/src/main/java/org/testng/internal/Invoker.java
@@ -1351,17 +1351,18 @@
// Exception thrown?
if (ite != null) {
- if (isSkipExceptionAndSkip(ite)){
- status = ITestResult.SKIP;
- }
// Invocation caused an exception, see if the method was annotated with @ExpectedException
- else if (expectedExceptionsHolder != null) {
+ if (expectedExceptionsHolder != null) {
if (expectedExceptionsHolder.isExpectedException(ite)) {
testResult.setStatus(ITestResult.SUCCESS);
status = ITestResult.SUCCESS;
} else {
- testResult.setThrowable(expectedExceptionsHolder.wrongException(ite));
- status= ITestResult.FAILURE;
+ if (isSkipExceptionAndSkip(ite)){
+ status = ITestResult.SKIP;
+ } else {
+ testResult.setThrowable(expectedExceptionsHolder.wrongException(ite));
+ status = ITestResult.FAILURE;
+ }
}
} else {
handleException(ite, testMethod, testResult, failure.count++);
diff --git a/src/test/java/test/skipex/SkippedExceptionTest.java b/src/test/java/test/skipex/SkippedExceptionTest.java
index 22a97b0..80a71e7 100644
--- a/src/test/java/test/skipex/SkippedExceptionTest.java
+++ b/src/test/java/test/skipex/SkippedExceptionTest.java
@@ -36,14 +36,16 @@
TestListenerAdapter listener= new TestListenerAdapter();
TestNG test= new TestNG(false);
test.addListener(listener);
- test.setVerbose(0);
test.setTestClasses(new Class[] {TestSkippedExceptionTest.class});
test.run();
List<ITestResult> skips= listener.getSkippedTests();
List<ITestResult> failures= listener.getFailedTests();
+ List<ITestResult> passed = listener.getPassedTests();
Assert.assertEquals(skips.size(), 1);
Assert.assertEquals(failures.size(), 1);
+ Assert.assertEquals(passed.size(), 1);
Assert.assertEquals(skips.get(0).getMethod().getMethodName(), "genericSkipException");
Assert.assertEquals(failures.get(0).getMethod().getMethodName(), "timedSkipException");
+ Assert.assertEquals(passed.get(0).getMethod().getMethodName(), "genericExpectedSkipException");
}
}
diff --git a/src/test/java/test/skipex/TestSkippedExceptionTest.java b/src/test/java/test/skipex/TestSkippedExceptionTest.java
index 8e7cffc..13df237 100644
--- a/src/test/java/test/skipex/TestSkippedExceptionTest.java
+++ b/src/test/java/test/skipex/TestSkippedExceptionTest.java
@@ -14,6 +14,11 @@
throw new SkipException("genericSkipException is skipped for now");
}
+ @Test(expectedExceptions = SkipException.class)
+ public void genericExpectedSkipException() {
+ throw new SkipException("genericExpectedSkipException should not be skipped");
+ }
+
@Test
public void timedSkipException() {
throw new TimeBombSkipException("timedSkipException is time bombed", "2007/04/10");