try {
Assert.assertEquals("1", "2");
} catch (Exception e) {
System.out.println("I am in error block");
}
如果断言语句失败,我想捕获错误catch块。我正在尝试使用上面的代码,但没有发生。
在Java异常的catch块中会检测到断言错误吗?
try {
Assert.assertEquals("1", "2");
} catch (Exception e) {
System.out.println("I am in error block");
}
如果断言语句失败,我想捕获错误catch块。我正在尝试使用上面的代码,但没有发生。
在Java异常的catch块中会检测到断言错误吗?
你几乎回答了你自己的问题。您的catch块不会捕获Assert
如果失败将抛出的AssertionError
,因为它是Error
(或更具体地说,它延伸至java.lang.Error
)。 See the docs欲了解更多信息。你的catch块只捕获Throwable
对象扩展java.lang.Exception
如果你真的想抓住它 - 你需要使用
catch (AssertionError e) {
...
然而,为others有mentioned,这是一个非常不寻常的道路要使用断言 - 他们通常应该通过,如果失败了,你想要继续执行程序是非常不寻常的。这就是为什么失败抛出Error
而不是Exception
。您可以在this question中阅读关于(不)捕获Error
的更多信息。
你确定你不只是想测试 - if (variableName == "1")
?
NB如果您正在测试单元测试帮助程序代码,就像匹配程序一样,那么赶上AssertionError
可能是有意义的。
当你想知道单元测试助手类是否正确地做了某事(通过单元测试;-)),人们希望能够捕捉到这样一个AssertionError。这将是一个有效的情况来抓住它,不是吗? – gkephorus
@ gphphorus是的,我想它可能是。随意编辑为“N.B.”。如果你喜欢,我会批准它:) –
@JRichardSnape - 我想比较两个只有字符串变量的java对象(从json对象获得)与getter&setters POJO。我只想比较一些(不是全部)变量来确定匹配。对于其中一个变量,只能比较部分值。将所有断言放入try catch(AssertionError)块是否是一个好主意?这样,我可以在catch部分返回false来指示哪个字段不匹配,并带有一个有用的错误消息字符串。这样,我就不用再写几个字了。听起来没问题? – testerjoe2
嗯,我相信你正在使用JUnit编写你的测试。在这种情况下,你不应该赶上你的Assert.assertEquals()
,因为他们应该通过正常的测试执行。如果它抛出任何异常,这意味着你的代码没有按照应有的执行。
如果你想赶上那样的错误,你需要像下面这样:
if (num == 1 || num == 2) {
throw new Exception();
}
你可以创建自己的异常类,并通过你想要的消息中。
反正你为什么要这么做?这看起来像是严重滥用'Assert'这是为了单元测试 – Dragondraikk