我是Java的新手,我正在关注Eclipse Total Beginner's Tutorials。它们都非常有用,但在第12课中,他将assertTrue
用于一个测试用例,将assertFalse
用于另一个测试用例。这是代码:
// Check the book out to p1 (Thomas)
// Check to see that the book was successfully checked out to p1 (Thomas)
assertTrue("Book did not check out correctly", ml.checkOut(b1, p1)); // If checkOut fails, display message
assertEquals("Thomas", b1.getPerson().getName());
assertFalse("Book was already checked out", ml.checkOut(b1,p2)); // If checkOut fails, display message
assertEquals("Book was already checked out", m1.checkOut(b1,p2));
我搜索了有关这些方法的良好文档,但没有找到任何内容。如果我的理解是正确的,assertTrue
以及assertFalse
在第二个参数求值为false时显示字符串。如果是这样的话,同时拥有它们有什么意义呢?
编辑:我想我看到令我困惑的是什么。作者可能只是为了展示他们的功能而放置它们(毕竟它是一个教程)。然后他设置了一个会失败的信息,这样就会打印出来并告诉我为什么失败了。开始变得更有意义......我认为这是解释,但我不确定。
答案 0 :(得分:104)
assertTrue
,则 false
将失败(换句话说,它确保该值为true)。 assertFalse
反其道而行之。
assertTrue("This will succeed.", true);
assertTrue("This will fail!", false);
assertFalse("This will succeed.", false);
assertFalse("This will fail!", true);
与许多其他事情一样,熟悉这些方法的最佳方法是尝试: - )。
答案 1 :(得分:29)
您的理解不正确,在这种情况下,请务必咨询JavaDoc。
<强> assertFalse 强>
public static void assertFalse(java.lang.String message, boolean condition)
断言条件为假。如果不是,它会抛出带有给定消息的AssertionError。
<强>参数:强>
message
- AssertionError的标识消息(null okay)condition
- 要检查的条件
答案 2 :(得分:9)
重点是语义。在assertTrue中,您断言表达式为true。如果不是,那么它将显示消息并且断言将失败。在assertFalse中,您声明表达式的计算结果为false。如果不是,则显示消息并且断言失败。
assertTrue (message, value == false) == assertFalse (message, value);
这些功能相同,但如果您希望某个值 false ,请使用assertFalse
。如果您希望某个值 true ,请使用assertTrue
。
答案 3 :(得分:9)
我认为这只是为了您的方便(以及您的代码的读者)
您的代码和单元测试应该理想地自我记录此API有助于实现,
请仔细阅读更清楚的内容:
AssertTrue(!(a > 3));
或
AssertFalse(a > 3);
当您在测试突然失败的xx个月之后打开测试时,您将花费更少的时间来理解第二种情况下出现的问题(我的意见)。如果你不同意,你可以在所有情况下坚持使用AssertTrue:)
答案 4 :(得分:7)
您对这些方法的第一反应对我来说非常有趣。我将在将来的参数中使用它,assertTrue和assertFalse都不是最友好的工具。如果你愿意的话
assertThat(thisOrThat, is(false));
它更具可读性,并且它也会打印出更好的错误消息。
答案 5 :(得分:2)
assertTrue
将失败,assertFalse
将执行相反的操作:如果选中的值为true,则失败。
另一件事,你的最后一个assertEquals很可能会失败,因为它会将“Book已经检出”字符串与m1.checkOut(b1,p2)的输出进行比较。它需要第三个参数(检查相等性的第二个值)。
答案 6 :(得分:2)
课程包含逻辑错误:
assertTrue("Book check in failed", ml.checkIn(b1));
assertFalse("Book was aleready checked in", ml.checkIn(b1));
在第一个断言中,我们希望checkIn返回True(因为checkin是成功的)。如果这会失败,我们会打印一条消息,例如&#34;预订登记失败。 现在在第二个断言中,我们期望checkIn失败,因为该书已在第一行中签入。所以我们希望checkIn返回一个False。如果出于某种原因,checkin会返回一个True(我们不会期望),而不是消息永远不会是#34; Book已经签入&#34;,因为签入成功。