JUnit断言方法应该用正面还是负面的措辞?

时间:2010-08-25 13:26:47

标签: java junit assert

我应该写作 assertTrue("User logged in", user.isLoggedIn());

assertTrue("User is not logged in", user.isLoggedIn());

前者在源文件中提供更好的阅读:
“我断言以下情况属实:用户已登录。”

错误信息可以双向阅读:
java.lang.AssertionError: User logged in
“声明用户已登录时出错” “错误是用户已登录。”

JUnit文档没有提供明确的指南,除非它是
“{@link AssertionError}的识别信息”,
在这两种情况下,文本都标识了正在运行的测试。

常见用法是什么?

7 个答案:

答案 0 :(得分:9)

怎么样:

assertTrue("User should be logged in", user.isLoggedIn());

双向工作。

答案 1 :(得分:3)

在断言消息中严格要求

在第一个示例中使用正断言文本,或者像:

assertTrue("User is logged in", user.isLoggedIn());

原因是:

  • 肯定断言更短
  • 您正在检查一个断言条件,以及许多可能的原因,为什么它出错了。不要试图检测原因,只是说明断言失败了什么。
  • 它在您的代码中更具可读性。通常建议使用正面表达式进行编码,这样可以减少读者心中对条件的一些否定
  • 它仍然可以在错误跟踪中读取,这些跟踪不应该由普通用户理解,而是由程序员理解,他们最终将以代码结束。甚至那些无法访问代码的sysadmin也会为作者提供完整的错误信息,程序员会理解,它来自一个断言。

尝试提供"所有上下文信息"断言消息并没有改善情况,而是造成信息混乱。

你知道,优秀的程序员调试代码并提供工作和更短的代码

在这个方向上首先要使用肯定断言消息。

另一个方向 - 用越来越多不必要的东西修补代码正在为编程地狱铺平道路。

答案 2 :(得分:2)

那么,你也可以陈述你的假设,然后假设不成立。像这样:

assertTrue("Expected user to be logged it, and wasn't", user.isLoggedIn());

制作更清晰的信息,但输入和阅读的时间更长。

答案 3 :(得分:1)

为了避免这个问题,我越来越倾向于使用assertThat而不是“低级”断言*方法。实际上,就像this article解释的那样,断言如果失败,它会给你一个非常明确的错误信息。

答案 4 :(得分:0)

您可以使用:

assertTrue("Test if user is logged in", user.isLoggedIn());

执行此操作时,您将验证user.isLoggedIn()是否属实,您无法确定用户是否已登录,您还不知道,您只是在测试它。< / p>

答案 5 :(得分:0)

有趣的是,我会用:

assertTrue("user should be logged in", user.isLoggedIn());

告诉我这个断言的预期状态是什么。

我认为最好的选择就是你理解的那个。

答案 6 :(得分:-1)

您应该包括两种情况。当你对断言进行三角测量时,你有更好的测试用例。