代码之家  ›  专栏  ›  技术社区  ›  Daniel Beardsley

断言消息:假定失败,或假定成功

  •  10
  • Daniel Beardsley  · 技术社区  · 16 年前

    当用任何一种语言进行测试时,每个人都会怎么做 表达他们的断言消息 ?

    我看到三个明显的方式:

    # assume failure
    assert (4-2) == 2, "Subtracting 2 from 4 doesn't equal 2"
    
    # describe success
    assert (4-2) == 2, "Subtracting 2 from 4 should equal 2"
    
    # be vauge with failure
    assert (4-2) == 2, "Subtracting 2 from 4 is broken"
    

    这显然是一个简单的例子,但你明白了。标准做法是什么?你是做什么的?为什么?

    7 回复  |  直到 16 年前
        1
  •  7
  •   Vinko Vrsalovic    16 年前

    我不知道标准做法是什么,但我将前两种方法与实际结果相加。

    "Substracting 2 from 4 should equal 2, but equals " + value
    

        2
  •  3
  •   Roddy    16 年前

    断言最重要的是要测试的实际条件。在C语言中,您可以使用预处理器“字符串化”来输出被测试的实际条件。我的代码只是输出

    Assert Failed: (4-2)==2 : Line 123, File foo.c
    

    如果幸运的话,你还可以得到一个堆栈转储。。。

        3
  •  2
  •   EMP    16 年前

    我不知道是否有任何“标准”,但在大多数情况下,我喜欢看到断言条件本身。C会自动执行此操作。在C#中,我必须复制粘贴它,不幸的是,例如。

    Debug.Assert(4-2==2, "4-2==2");

    在某些情况下,查看比条件提供的更多的信息是有用的。在这种情况下,我将assert消息视为错误消息,并说明错误所在,例如。

    Debug.Assert(result != null, "No result returned for input '" + input + "'");

        4
  •  2
  •   Jeffrey Fredrick    16 年前

    通常,当有几个属性以某种方式相关时,这是一个问题。将断言提取到一个名为的方法中,以指示您感兴趣的方面/关系,这样可以更清楚地了解正在发生的事情,而无需维护注释/消息。

        5
  •  1
  •   Adam Rosenfield    16 年前

    在我看来,这真的无关紧要,只要错误消息告诉你哪里出了问题,哪里出了问题。在正常操作下,将永远看不到断言消息。如果发现,代码中的某个地方有一个bug,您需要能够跟踪并修复该bug。

    该消息应提供尽可能多的有用信息-如果您正在检查两个值是否相等,则应打印出值。这样就不需要使用调试器来检查这些值。当然,这样做需要您的语言支持断言消息中的非静态信息。若断言消息只能是固定的、静态的字符串,那个么若不跳转,就无法添加额外的运行时信息。

        6
  •  1
  •   reuben Omranic    16 年前

    Roddy的建议是一个很好的建议——它无疑会降低添加新断言的“成本”(即不需要考虑或键入新的字符串消息)。信不信由你,但实现他的建议对我使用断言产生了重大影响。

    如果你还在寻找更清晰的文本信息,你可以考虑如下:

    “预期4-2等于2”

    这似乎表明(至少对我来说)预期的答案是2,但预期没有实现。。。

        7
  •  1
  •   philant    16 年前

    文件