Java / JUnit-AssertTrue与AssertFals
我是Java的新手,并且正在关注Eclipse Total Beginner的教程。 它们都很有帮助,但是在第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));
我已经搜索了有关这些方法的好的文档,但没有发现任何东西。 如果我的理解是正确的,则当第二个参数的值为false时,assertTrue和assertFalse会显示字符串。 如果是这样,那么将它们都包含在什么地方呢?
编辑:我想我看到了什么让我感到困惑。 作者可能只是为了展示它们的功能而将它们放在其中(毕竟这是一个教程)。 然后他设置了一个失败的消息,以便将消息打印出来并告诉我为什么失败了。 开始变得更有意义了……我认为这是解释,但我不确定。
7个解决方案
107 votes
如果第二个参数的计算结果为false,则assertTrue将失败(换句话说,它确保该值为true)。 assertFalse则相反。
assertTrue("This will succeed.", true);
assertTrue("This will fail!", false);
assertFalse("This will succeed.", false);
assertFalse("This will fail!", true);
与许多其他事情一样,熟悉这些方法的最好方法是尝试:-)。
Matt Solnit answered 2020-01-27T14:07:56Z
29 votes
您的理解是不正确的,在这种情况下总是请教JavaDoc。
断言错误
condition
断言条件为假。 如果不是,它将在给定的消息中引发AssertionError。
参数:
condition-AssertionError的标识消息(null好的)
condition-要检查的条件
nephewtom answered 2020-01-27T14:08:42Z
10 votes
关键是语义。 在assertTrue中,您断言该表达式为true。 如果不是,则它将显示该消息,并且断言将失败。 在assertFalse中,您断言一个表达式的计算结果为false。 如果不是,则显示该消息,并且断言失败。
assertTrue (message, value == false) == assertFalse (message, value);
这些在功能上是相同的,但是如果期望值是假的,则使用assertFalse。如果期望值是真,则使用assertTrue。
Xetius answered 2020-01-27T14:09:09Z
9 votes
我认为这只是为了您的方便(以及您的代码读者)
理想情况下,您的代码和单元测试应该是自我记录的文件,该API可以帮助您进行自我记录,
考虑一下更清晰的内容:
AssertTrue(!(a > 3));
要么
AssertFalse(a > 3);
当您在测试突然失败后的xx个月后打开测试时,您将花费更少的时间来了解第二种情况出了什么问题(我认为)。 如果您不同意,则在所有情况下都可以始终坚持使用AssertTrue :)
tdobek answered 2020-01-27T14:09:47Z
7 votes
您对这些方法的第一反应对我来说很有趣。 我将在以后的论点中使用它,因为assertTrue和assertFalse都不是最友好的工具。 如果你会用
assertThat(thisOrThat, is(false));
它更具可读性,并且还能打印出更好的错误消息。
iwein answered 2020-01-27T14:10:12Z
2 votes
如果检查的值为false,则assertTrue将失败,而如果检查的值为true,则assertFalse将相反:
另一件事,您的最后一个assertEquals很可能会失败,因为它将把“ Book is check out”字符串与m1.checkOut(b1,p2)的输出进行比较。 它需要第三个参数(用于检查是否相等的第二个值)。
bashflyng answered 2020-01-27T14:10:37Z
2 votes
该课程包含一个逻辑错误:
assertTrue("Book check in failed", ml.checkIn(b1));
assertFalse("Book was aleready checked in", ml.checkIn(b1));
在第一个断言中,我们期望checkIn返回True(因为checkin成功)。 如果失败,我们将打印一条消息,例如“书签入失败。现在在第二个断言中,我们期望checkIn失败,因为该书已经在第一行中被签入。 因此,我们期望checkIn返回False。 如果由于某种原因签入返回True(我们不希望),则该消息永远不应为“ Book has been check in”,因为签入成功。
Ronald Mos answered 2020-01-27T14:11:02Z