【问题标题】:Literals or expressions in unit test asserts?单元测试断言中的文字或表达式?
【发布时间】:2009-06-12 21:53:17
【问题描述】:

在单元测试中,您更喜欢 Assert 中的文字值还是表达式?这个小例子说明了我的意思——请注意 cmets:

[Test]
public function fromXML_works() : void {
    var slideshow : Slideshow = SlideshowConverter.fromXML(xmlSample);

    // do you prefer literal value "1":
    assertEquals(slideshow.id, "1");

    // ... or an expression like this:
    assertEquals(slideshow.id, xmlSample.@id);
}


private var xmlSample : XML =
    <slideshow id="1">
        <someOtherTags />
    </slideshow>;

表达式的好处在于,当 XML 示例更改时,单元测试不会中断。另一方面,我基本上在我不喜欢的单元测试中直接提供了 SlideshowConverter 一个方面的实现(测试应该测试意图,而不是实现)。我还可以想象,使用表达式的测试更容易出现编程错误(例如,我可能在测试方法中的 E4X 表达式中犯了错误)。

您更喜欢哪种方法?在现实世界的项目中,什么优势通常更重要?

【问题讨论】:

    标签: tdd expression assert


    【解决方案1】:

    特别是因为您已标记此 TDD:坚持使用文字。在代码存在之前编写测试以通过它,你对自己说,“自我:如果我有这个函数并给它那些参数,那么 this 就是我会得到的。” this 是一个非常具体的值。不要把它藏起来;不要抽象它 - 只需将值放入测试中。它还增强了测试的文档价值。

    【讨论】:

      【解决方案2】:

      就我个人而言,我喜欢在我的测试中使用常量——它可以确保测试装置简单明了。另外,正如您提到的,它避免了测试本身的编程错误,这可能会隐藏真实代码中的编程错误。

      【讨论】:

        猜你喜欢
        • 2014-01-08
        • 1970-01-01
        • 2021-12-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多