我应该在编译之前编写测试吗?
问题描述:
我一直在尝试为我的一个开源项目遵循一个宽松的TDD工作流程。这是其他程序员使用的API。我应该在编译之前编写测试吗?
因此,一个关键的方面,以及使API“工作”还在设计将如何被消耗掉。我听到一些人说,在编译之前编写测试是浪费时间,并且在API稳定之前可能会不断重写。我还听说,它应该遵循的工作流程如下所示:
- 写这不会编译测试
- 让它编译
- 让它绿色
我一直试图遵循这个工作流程,但我最终会遇到一些奇怪的事情。例如,在我的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,我应该担心这样的测试吗?
答
我使用ReSharper的,你可以创建空手柄方法,该方法将得到IPatternMatcher。 TDD是强大的东西,你应该继续尝试。我试着在代码之前测试代码和测试代码之后,我发现代码之前的测试是强大的东西。您可以非常快速地调试代码错误。测试是保证您的代码将按照您的预期工作。
答
号
不要写测试编译器是否正常工作的代码。如果你正在使用动态语言(或静态语言中的动态特性),那么他们会实际告诉你你忘记了某些东西,或者将某些东西重构成失败的单元测试,这些测试很有意义。
单元测试执行的要点是,如果它是在错误失败构建。如果您的代码中存在编译器错误,则构建将会失败。没有必要再次猜测它。
“Red-Green-Refactor”听起来比“不会编译 - 编译 - 绿色”好得多:P – 2013-02-15 05:21:52
这对于程序员来说是一个非常好的问题.stackexchange.com – 2013-02-15 05:24:36
@SimonWhitehead well ...技术上编译器错误也算作“红色”:) – Earlz 2013-02-15 05:27:53