Testing 即使断言失败,测试也没有失败

Testing 即使断言失败,测试也没有失败,testing,testng,assertion,Testing,Testng,Assertion,我对本文中提到的问题也有同样的看法,但我会用一个代码示例来说明,有人可以回答这个问题 问题是我有两门课。其中一个包含@Test方法,该方法调用验证,将所有断言放在其中。当通过反射调用验证方法时会出现问题,如下所示: public class TestClass { @Test public void test() { BaseValidation baseValidation = new BaseValidation(); baseValidation.

我对本文中提到的问题也有同样的看法,但我会用一个代码示例来说明,有人可以回答这个问题

问题是我有两门课。其中一个包含
@Test
方法,该方法调用
验证
,将所有断言放在其中。当通过反射调用
验证
方法时会出现问题,如下所示:

public class TestClass {
    @Test
    public void test() {

      BaseValidation baseValidation = new BaseValidation();
      baseValidation.validateAll();

    }

}

public class BaseValidation {
    public void validateAll() {
        for (Method method : this.getClass().getDeclaredMethods()) {
            method.invoke(new ValidationClass(), null);
        }
    }
}

public class ValidationClass extends BaseValidation {
    public void validate() {
        Assert.fail("some message");
    }
}
在这种情况下,整个测试将通过,即使验证方法中断言失败。如何修复它?如果我没有使用反射:

@Test
public void test() {
  ValidationClass validationClass = new ValidationClass();
  validationClass.validate();    // NOT USING REFLECTION
}

它可以工作,但这不是我想要的。

如果您在调用中捕获异常,那么您应该得到InvocationTargetException,它将由测试方法中的AssertionError引发。既然你抓住了它,你的测试就通过了。抛出它或获取路由原因以将测试标记为失败。

如果在调用中捕获异常,则应该获取InvocationTargetException,该异常将由测试方法中的AssertionError引发。既然你抓住了它,你的测试就通过了。抛出它或让路由原因将测试标记为失败。

是否捕获invoke方法抛出的异常?你想实现什么?当然,为了代码更简洁,我省略了它。我有一个这样工作的框架,没有空间来重新构造它,只需要让它正常工作。因此,如果您正在捕获它,那么您应该得到InvocationTargetException,它将由测试方法中的AssertionError引发。既然你抓到了,你的考试就通过了。哦,对了。即使打印了stackTrace,TestNG也没有将其视为例外。谢谢!将其标记为关闭线程的答案。是否捕获invoke方法引发的异常?你想实现什么?当然,为了代码更简洁,我省略了它。我有一个这样工作的框架,没有空间来重新构造它,只需要让它正常工作。因此,如果您正在捕获它,那么您应该得到InvocationTargetException,它将由测试方法中的AssertionError引发。既然你抓到了,你的考试就通过了。哦,对了。即使打印了stackTrace,TestNG也没有将其视为例外。谢谢!将其标记为关闭线程的答案。