Java / JUnit – AssertTrue vs AssertFalse
我对Java很新,并且遵循Eclipse Total Beginner的教程 。 他们都非常有帮助,但在第12课中,他使用assertTrue
作为一个testing用例, 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));
我已经在这些方法上search了很好的文档,但没有find任何东西。 如果我的理解是正确的,当第二个参数的计算结果为false时, assertTrue
以及assertFalse
显示string。 如果是这样的话,那么两者有什么关系呢?
编辑:我想我看到什么让我困惑。 作者可能已经把它们都放在了显示它们的function上(毕竟它是一个教程)。 而他build立了一个会失败的东西,这样信息就会打印出来,告诉我为什么失败了。 开始更有意义…我认为这是解释,但我不确定。
如果第二个参数的计算结果为false
assertTrue
会失败(换句话说,它确保该值为真)。 assertFalse
则相反。
assertTrue("This will succeed.", true); assertTrue("This will fail!", false); assertFalse("This will succeed.", false); assertFalse("This will fail!", true);
和许多其他事情一样,熟悉这些方法的最好方法就是试验:-)。
你的理解是不正确的,像这样的情况下总是咨询JavaDoc 。
assertFalse
public static void assertFalse(java.lang.String message, boolean condition)
断言条件是错误的。 如果不是,则抛出一个带有给定消息的AssertionError。
参数:
message
– AssertionError的标识消息(null)condition
– 条件进行检查
重点是语义。 在assertTrue中,你断言expression式是真的。 如果不是,则会显示消息,断言将失败。 在assertFalse中,您断言expression式的计算结果为false。 如果不是,则显示该消息,断言失败。
assertTrue (message, value == false) == assertFalse (message, value);
这些在function上是相同的,但是如果您希望值为false,则使用assertFalse
。 如果您期望值为true ,则使用assertTrue
。
我认为这只是为了您的方便(以及您的代码的读者)
你的代码和你的unit testing应该是自我logging这个API的帮助,
想一想更清楚的是:
AssertTrue(!(a > 3));
要么
AssertFalse(a > 3);
当你在xx个月后打开你的testing,当你的testing突然失败的时候,你将会花费更less的时间去理解第二种情况(我的观点)出了什么问题。 如果你不同意,你可以随时坚持使用AssertTrue)
你对这些方法的第一反应对我来说很有意思。 我将在将来的论点中使用它,assertTrue和assertFalse都不是最友好的工具。 如果你会使用
assertThat(thisOrThat, is(false));
它更可读,它也打印出更好的错误信息。
如果选中的值为false, assertTrue
将失败,并且assertFalse
将做相反的操作:如果选中的值为true,则失败。
另一件事,你的最后一个assertEquals很可能会失败,因为它会将“Book has been checked out”string与m1.checkOut(b1,p2)的输出进行比较。 它需要第三个参数(第二个值来检查是否相等)。
该课程包含一个逻辑错误:
assertTrue("Book check in failed", ml.checkIn(b1)); assertFalse("Book was aleready checked in", ml.checkIn(b1));
在第一个断言中,我们期望checkIn返回True(因为checkin是成功的)。 如果这样做会失败,我们会打印一条消息,比如“book check in failed”,现在在第二个断言中,我们期望checkIn失败,因为这本书已经在第一行了,所以我们期望checkIn返回一个False。如果由于某种原因checkin返回一个True(我们不期望),而不应该是“Book已经签入”,因为签入是成功的。