有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java JUnit断言方法的措辞应该是肯定的还是否定的?

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

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

前者可以更好地读取源文件:
“我断言以下是正确的:用户已登录。”

错误消息可以双向读取:
java.lang.AssertionError: User logged in
“断言用户已登录时出错”
“错误是用户已登录。”

JUnit文档没有提供一个明确的指南,除非它是
“用于{@link AssertionError}的标识消息,
在这两种情况下,文本标识正在运行的测试

常用的用法是什么


共 (6) 个答案

  1. # 1 楼答案

    好吧,你也可以陈述你的假设,然后说明假设是如何不成立的。就像这样:

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

    使信息更清晰,但打字和阅读的时间更长

  2. # 2 楼答案

    为了避免这个问题,我越来越倾向于使用assertThat而不是“低级”的assert*方法。事实上,正如this article所解释的,AssertIt将在失败时为您提供非常清晰的错误消息

  3. # 3 楼答案

    有趣的是,我会用:

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

    这告诉我这个断言的预期状态

    我认为最好的选择是你能理解的

  4. # 4 楼答案

    你可以使用:

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

    当你这么做的时候,你在验证user.isLoggedIn()是真的,你不能说用户是否登录了,你还不知道,你只是在测试它

  5. # 5 楼答案

    那么:

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

    这是双向的

  6. # 6 楼答案

    在你的断言信息中要绝对积极

    使用第一个示例中的肯定断言文本,或者类似于:

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

    原因是:

    • 肯定的断言更短
    • 您正在检查一个断言的条件,以及许多可能的原因,为什么它出错。不要试图检测原因,只需说明断言失败的原因
    • 它在代码中更具可读性。一般建议使用积极的表达方式进行编码,这样可以在读者的头脑中保留一些对条件的否定
    • 它在错误跟踪中仍然是可读的,这不是普通用户应该理解的,而是程序员应该理解的,程序员最终还是会编写代码。甚至连连系统管理员都无法访问代码,他们也会向作者提供完整的错误信息,程序员也会理解,它来自断言

    试图在断言消息中提供“所有上下文信息”并不能改善情况,反而会造成信息混乱

    你知道,优秀的程序员会调试代码,并提供有效且较短的代码

    在这个方向上,首先要做的就是使用积极的断言消息

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