您的位置:首页 > 编程语言

[Study Note] TDD: Consistent test structure (测试代码的结构一致性)

2010-04-01 20:56 381 查看
在 codebetter 上看到 Mark Needham 的一篇文章 TDD: Consistent test structure,对于测试代码的结构进行了探讨。

在以下的两个结构相近/内容相反的测试函数中有什么不同么?

[Test]
public void ShouldSetSomethingIfWeHaveAFoo()
{
  var aFoo = FooBuilder.Build.WithBar("bar").WithBaz("baz").AFoo();

  // some random setup
  // some stubs/expectations

  var result = new Controller(...).Submit(aFoo);

  Assert.That(result.HasFoo, Is.True);
}


[Test]
public void ShouldNotSetSomethingIfWeDoNotHaveAFoo()
{
// some random setup
// some stubs/expectations

var result = new Controller(...).Submit(null);

Assert.That(result.HasFoo, Is.False);
}


只要留意代码,就能看出第二段测试代码中使用 Inline 将变量 aFoo 直接赋值为 null,然后传递了进去。

Needham 的同事 Damian 说,Inline 使得在将来(比较长的一段时间之后)阅读代码的时候,这两个相互印证的测试在结构上显得不一致,从而影响对于测试代码整体的理解。

Needham 推荐的了一种单元测试函数的“结构”,如下:

[Test]
public void ShouldShowTheStructureOfMarksTests()
{
// The test data that’s important for the test
// Less important test data
// Expectation/Stub setup
// Call to object under test
// Assertions
}


我这里还有一种更简单一点的结构:

[Test]
public void SimpleStructureOfMarksTests()
{
// Assign
// Act
// Assert
}


其实在这里讨论的,无非是如何能够更好的保证代码可读性,即使测试的代码也不例外,以前确实没有注意到这方面的问题。

那么我的问题是,如果两边都采用 inline 方式呢?而且我以为,inline 可以带来一点点编译上的性能优势。

inline, or not inline 可能是关于个人编码风格的问题吧。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: