我应该在编译之前编写测试吗?

时间:2013-02-15 05:15:16

标签: c# unit-testing tdd nunit api-design

我一直在尝试为我的一个开源项目遵循松散的TDD工作流程。它是其他程序员使用的API。

因此,一个关键方面以及使API“工作”也在设计它将如何被消费。我听说有些人说在编译之前编写测试是浪费时间,并且在API稳定之前容易不断重写。我也听说它应该遵循这样的工作流程:

  1. 编写无法编译的测试
  2. make it compile
  3. 绿色环保
  4. 我一直在努力遵循这个工作流程,但我最终得到了一些奇怪的东西。例如,在我的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,我应该担心这样的测试吗?

2 个答案:

答案 0 :(得分:3)

没有

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

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

答案 1 :(得分:1)

我使用resharper你可以创建空的Handles方法,它将获得IPatternMatcher。 TDD是强大的东西,你应该继续尝试。我试图在代码之前测试两种方法并在代码之后测试,我发现代码之前的测试是强大的东西。您可以非常轻松地调试代码错误。测试保证您的代码能够按预期运行。