2013-02-15 82 views
5

我一直在尝试为我的一个开源项目遵循一个宽松的TDD工作流程。这是其他程序员使用的API。我应该在编译之前编写测试吗?

因此,一个关键的方面,以及使API“工作”还在设计将如何被消耗掉。我听到一些人说,在编译之前编写测试是浪费时间,并且在API稳定之前可能会不断重写。我还听说,它应该遵循的工作流程如下所示:

  1. 写这不会编译测试
  2. 让它编译
  3. 让它绿色

我一直试图遵循这个工作流程,但我最终会遇到一些奇怪的事情。例如,在我的API我有这两种方法:

Handles(string pattern); //had this one already 
Handles(IPatternMatcher pattern); //needed this one 

我需要获得第二种形式的方法添加到我的API。所以,我结束了一个简单的测试,像这样:

public void Handles_SupportsIPatternMatcher() 
{ 
    var api=new MyAPI(); 
    api.Handles(new TestPatternMatcher()); 
} 

这似乎是浪费后,它被实施。

我应该继续遵循这一流程,还是有办法改善吗?我如何避免编写基本上只检查编译器错误的测试?由于它是一个公共消费品API,我应该担心这样的测试吗?

+1

“Red-Green-Refactor”听起来比“不会编译 - 编译 - 绿色”好得多:P – 2013-02-15 05:21:52

+2

这对于程序员来说是一个非常好的问题.stackexchange.com – 2013-02-15 05:24:36

+1

@SimonWhitehead well ...技术上编译器错误也算作“红色”:) – Earlz 2013-02-15 05:27:53

回答

1

我使用ReSharper的,你可以创建空手柄方法,该方法将得到IPatternMatcher。 TDD是强大的东西,你应该继续尝试。我试着在代码之前测试代码和测试代码之后,我发现代码之前的测试是强大的东西。您可以非常快速地调试代码错误。测试是保证您的代码将按照您的预期工作。

3

不要写测试编译器是否正常工作的代码。如果你正在使用动态语言(或静态语言中的动态特性),那么他们会实际告诉你你忘记了某些东西,或者将某些东西重构成失败的单元测试,这些测试很有意义。

单元测试执行的要点是,如果它是在错误失败构建。如果您的代码中存在编译器错误,则构建将会失败。没有必要再次猜测它。

相关问题