[Study Note] TDD: Consistent test structure (测试代码的结构一致性)
2010-04-01 20:56
381 查看
在 codebetter 上看到 Mark Needham 的一篇文章 TDD: Consistent test structure,对于测试代码的结构进行了探讨。
在以下的两个结构相近/内容相反的测试函数中有什么不同么?
只要留意代码,就能看出第二段测试代码中使用 Inline 将变量 aFoo 直接赋值为 null,然后传递了进去。
Needham 的同事 Damian 说,Inline 使得在将来(比较长的一段时间之后)阅读代码的时候,这两个相互印证的测试在结构上显得不一致,从而影响对于测试代码整体的理解。
Needham 推荐的了一种单元测试函数的“结构”,如下:
我这里还有一种更简单一点的结构:
其实在这里讨论的,无非是如何能够更好的保证代码可读性,即使测试的代码也不例外,以前确实没有注意到这方面的问题。
那么我的问题是,如果两边都采用 inline 方式呢?而且我以为,inline 可以带来一点点编译上的性能优势。
inline, or not inline 可能是关于个人编码风格的问题吧。
在以下的两个结构相近/内容相反的测试函数中有什么不同么?
[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 可能是关于个人编码风格的问题吧。
相关文章推荐
- [Study Note] TDD and Unit Test 20100401
- 测试驱动开发(Test-Driven Development,简称TDD)--单元测试-->提高代码质量
- junit 测试spring-test 代码!在项目中运行测试通过,留着以后直接使用
- 使用Record Espresso Test功能自动生成测试代码
- 13.go开源groupcache项目笔记——byteview_test测试代码
- jQM note:page structure 页面结构
- 基于pycaffe从零开始写mnist(第二篇)——生成训练网络结构文件(train.prototxt)+测试网络结构文件(test.prototxt)
- 基础设施代码测试(Molecule和Testinfra使用)
- [TEST] 测试博客园博客中能否放置javascript代码与CSS
- Linux移植随笔:对tslib库的ts_test测试程序代码的一点分析
- TDD Test Driven Development 测试驱动开发
- 一致性hash算法 java代码实现与测试
- 测试驱动开发TDD(四)Google Test系列(目录)
- [翻译Joel On Software]Joel测试:12步写出更高质量代码/The Joel Test: 12 Steps to Better Code
- TDD:代码可测试设计
- C# 利用VS2010结核TestDriven.Net工具进行代码测试
- Unit Test的意义和测试代码的写法
- Ubuntu安装GoogleTest框架并测试C++代码
- 领域模型(domain model) 依赖注入(Dependency injection) 测试驱动(TDD test driven development)