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也没有将其视为例外。谢谢!将其标记为关闭线程的答案。