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,我应该担心这样的测试吗?

4

2 回答 2

3

不。

不要编写测试编译器是否工作的代码。如果您使用动态语言(或静态语言中的动态功能),这些测试会很有意义,它们实际上会告诉您您忘记了某些东西,或者将某些东西重构为失败的单元测试。

单元测试执行的重点是在构建出错时使构建失败。如果您的代码中有编译器错误,则构建已经失败。没有必要事后猜测。

于 2013-02-15T07:54:04.233 回答
1

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

于 2013-02-15T05:23:16.767 回答