Java 如何在断言失败时继续执行

Java 如何在断言失败时继续执行,java,testng,selenium-rc,assertion,verify,Java,Testng,Selenium Rc,Assertion,Verify,我正在使用SeleniumRC,使用Java和eclipse和TestNG框架。我有以下代码片段: assertTrue(selenium.isTextPresent("Please enter Email ID")); assertTrue(selenium.isTextPresent("Please enter Password")); 第一个断言失败,执行停止。但是我想继续进一步的代码片段。一旦断言失败,执行应该停止,这就是使用它们的意义所在 您可以声明一个断言来测试这两件事,但是您同时

我正在使用SeleniumRC,使用Java和eclipse和TestNG框架。我有以下代码片段:

assertTrue(selenium.isTextPresent("Please enter Email ID"));
assertTrue(selenium.isTextPresent("Please enter Password"));

第一个断言失败,执行停止。但是我想继续进一步的代码片段。

一旦断言失败,执行应该停止,这就是使用它们的意义所在


您可以声明一个断言来测试这两件事,但是您同时测试两件事。最好先修复第一次失败的原因,然后再进行第二次断言。

将断言更改为验证:

verifyTrue(selenium.isTextPresent("Please enter Email ID"));
verifyTrue(selenium.isTextPresent("Please enter Password"));

Selenium IDE使用verify执行软断言,这意味着即使检查失败,测试仍将继续,并在测试结束或硬断言事件时报告失败

使用TestNG,可以通过使用自定义测试侦听器来实现这些软断言。我在我的博客上记录了如何做到这一点:


基本上,您需要创建自己的
verify*
方法,在这些方法中,您可以捕获断言失败并将它们添加到映射中。然后,在自定义
调用后
侦听器中,如果映射不是空的,您可以将测试设置为失败。

我建议您使用软断言,这些断言在TestNg中以本机方式提供

package automation.tests;

import org.testng.asserts.Assertion;
import org.testng.asserts.SoftAssert;

public class MyTest {
  private Assertion hardAssert = new Assertion();
  private SoftAssert softAssert = new SoftAssert();
}

@Test
public void testForSoftAssertionFailure() {
  softAssert.assertTrue(false);
  softAssert.assertEquals(1, 2);
  softAssert.assertAll();
}

来源:

我再次添加了一种在断言失败时继续的最简单方法。有人问


因此,如果你不想在第一次断言中失败而停止你的程序:那么它会有什么影响呢?Dave,我也在寻找同样的东西,但是你的博客链接不起作用。你能给我一些关于上述答案的其他链接吗。@Dave这个博客不再可用了吗?这个答案现在已经过时了。Dave Hunt:找不到这个博客。为什么它是非活动的?博客被迁移了,这篇文章现在可以在上找到,但请注意,这篇文章现在已经8年了,可能已经过时了。Ofc,该测试应该100%成功,其他测试失败,但是当您想要查看所有失败的断言时,“软断言”的这个特殊功能是有用的(例如,对测试对象的12个字段值中的4个字段值的断言失败)在单个测试用例中,并且在第一个测试用例之后不要中断。这个答案与OP的问题更相关。在哪里定义了
verifyTrue
方法?
try{
        Assert.assertEquals(true, false);
        }catch(AssertionError e)
        {
            System.out.println("Assertion error. ");
        }

        System.out.println("Test Completed.");