您是否更喜欢单元测试中Asserts中的文字值或表达式?这个小例子说明了我的意思 - 请注意评论:
[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表达式可能会出错)。
您更喜欢哪种方法?在现实世界的项目中,哪些优势通常更重要?
答案 0 :(得分:1)
就个人而言,我喜欢在我的测试中使用常量 - 它确保测试装置简单明了。另外,正如您所提到的,它避免了测试本身的编程错误,这可能会隐藏实际代码中的编程错误。
答案 1 :(得分:1)
特别是因为你已经标记了这个TDD:坚持使用文字。在代码存在之前编写测试来传递它,你对自己说,“自我:如果我有这个功能并给它那些参数,那么这个就是我会得到的。”其中此是一个非常具体的值。不要把它藏起来;不要抽象它 - 只需将值放入测试中。它还增强了测试的文档价值。