JUnit断言方法应该用正数还是负数来表述?在断言消息中严格肯定

2022-09-04 20:59:57

我应该写

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

前者在源文件中提供了更好的读取:
“我断言以下内容是正确的:用户登录。

可以以两种方式阅读错误消息:

“断言用户已登录时出错”
“错误是用户已登录。java.lang.AssertionError: User logged in

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

常见的用法是什么?


答案 1

怎么样:

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

双向工作。


答案 2

在断言消息中严格肯定

使用肯定的断言文本,如第一个示例所示,或类似:

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

原因是:

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

试图在断言消息中提供“所有上下文信息”并没有改善这种情况,而是造成了信息混乱。

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

将使用肯定断言消息作为朝这个方向做的第一件事。

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


推荐