Java/JUnit - AssertTrue与AssertFalse

Tho*_*mas 51 java junit assert assertions junit4

我是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));
Run Code Online (Sandbox Code Playgroud)

我搜索了这些方法的好文档,但没有找到任何东西.如果我的理解是正确的,assertTrue那么assertFalse当第二个参数求值为false时显示字符串.如果是这样的话,拥有它们的重点是什么?

编辑:我想我看到令我困惑的是什么.作者可能只是为了展示他们的功能而放置它们(毕竟它是一个教程).然后他设置了一个会失败的信息,这样就会打印出来并告诉我为什么失败了.开始变得更有意义......我认为这是解释,但我不确定.

Mat*_*nit 108

assertTrue如果第二个参数的计算结果将失败false(换句话说,它确保值为true). assertFalse反其道而行之.

assertTrue("This will succeed.", true);
assertTrue("This will fail!", false);

assertFalse("This will succeed.", false);
assertFalse("This will fail!", true);
Run Code Online (Sandbox Code Playgroud)

与许多其他事情一样,熟悉这些方法的最佳方法是尝试:-).

  • `assert` 可以解释为 `must be`。因此,您可以将语句 `assertTrue("~", expression);` 解释为表达式必须为真。 (2认同)
  • 实际上**最佳**方式是阅读javadoc总是比*实验*和*猜测*好。 (2认同)

小智 29

您的理解是不正确的,在这些情况下,请始终参考JavaDoc.

assertFalse

public static void assertFalse(java.lang.String message,
                               boolean condition)
Run Code Online (Sandbox Code Playgroud)

断言条件是错误的.如果不是,它会抛出带有给定消息的AssertionError.

参数:

  • message - AssertionError的标识消息(null okay)
  • condition - 要检查的条件


Xet*_*ius 10

重点是语义.在assertTrue中,您断言表达式为true.如果不是,那么它将显示消息并且断言​​将失败.在assertFalse中,您声明表达式的计算结果为false.如果不是,则显示消息并且断言​​失败.

assertTrue (message, value == false) == assertFalse (message, value);
Run Code Online (Sandbox Code Playgroud)

这些在功能上是相同的,但如果您希望某个值为false,则使用assertFalse.如果您希望值为true,请使用assertTrue.


tdo*_*bek 9

I think it's just for your convenience (and the readers of your code)

Your code, and your unit tests should be ideally self documenting which this API helps with,

Think abt what is more clear to read:

AssertTrue(!(a > 3));
Run Code Online (Sandbox Code Playgroud)

or

AssertFalse(a > 3);
Run Code Online (Sandbox Code Playgroud)

When you open your tests after xx months when your tests suddenly fail, it would take you much less time to understand what went wrong in the second case (my opinion). If you disagree, you can always stick with AssertTrue for all cases :)


iwe*_*ein 7

你对这些方法的第一反应对我来说非常有趣.我将在将来的参数中使用它,assertTrue和assertFalse都不是最友好的工具.如果你愿意的话

assertThat(thisOrThat, is(false));
Run Code Online (Sandbox Code Playgroud)

它更具可读性,并且它也打印出更好的错误信息.