代码之家  ›  专栏  ›  技术社区  ›  Borek Bernard

单元测试断言中的文字或表达式?

  •  2
  • Borek Bernard  · 技术社区  · 15 年前

    在单元测试中,您喜欢在断言中使用文字值还是表达式?这个小例子说明了我的意思-请注意评论:

    [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表达式中出错)。

    你喜欢什么方法?在实际项目中,什么优势通常更重要?

    2 回复  |  直到 15 年前
        1
  •  1
  •   Joe Enos    15 年前

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

        2
  •  1
  •   Carl Manaster    15 年前

    特别是因为您已经标记了这个tdd:stick-with-literals。在代码存在之前编写一个测试来传递它,你会对自己说,“self:如果我有这个函数并给了它那些参数,那么 是我想要回来的。 是一个非常具体的值。不要隐藏它;不要抽象它-只需将值放入测试。它还提高了测试的文档价值。