采访.NET版Cucumber的创始人Aslak Hellesøy

InfoQ采访了Cucumber的创始人Aslak Hellesøy,最近该工具提供了.NET方面的支持。Cucumber是一款颇受赞誉的行为驱动开发(BDD)测试工具。在Agile2009大会上,InfoQ的工作人员Mark Levison报道了功能测试工具研讨会的消息,Matt Wynne和Richard Lawrence已开始研究Cucumber的.NET解决方案,随后命名为Cuke4Nuke。

InfoQ你可以简单介绍一下Cucumber吗?

Aslak: Cucumber是一款颇受赞誉的针对行为驱动开发(BDD)而设计的测试工具。它让人们用最少的技术术语来描述系统需求。通过纯文本来描述他们需要系统如何执行的具体实例。用简洁的语言,比如:“在Bob的储蓄账户上应该有5000美元存款”。
用纯文本作为编好的代码需求说明。代码写完之时,该文本也可用于自动回归/验收测试。一些人把它称之为可执行需求。
BDD工具有两大功能:一、“单元测试”功能(例如:NSpec和RSpec)和高级验收测试功能(例如:Cucumber、JBehave或者类似的工具)。Cucumber的主要目标是让更多的人参与到验收测试和需求分析当中,并使得这个过程更加引人入胜。

InfoQ:如何区别Cucumber和Fit/Fitnesse这种类型的工具呢?

Aslak: 先从两者的相似之处开始吧!FIT和Cucumber都是命令行工具。实际上,Fitnesse是基于FIT的Wiki工具。

测试语言

FIT/Fitnesse和Cucumber都执行高级语言编写的验收测试。FIT仅识别HTML,Fitnesse则通过提供Wiki语法来简化编写测试的过程。在FIT/Fitnesse当中,所有的测试都以表格的形式呈现。

另一方面,Cucumber让用户用纯文本文件且不受英语的限制来编写测试。例如:Ou Français. Eller norsk. или Русский。它支持超过40种语言。事实上,Cucumber从关键字"Scenario"、"Given"、"When"或"Then"开始识别代码。

当然,Cucumber还可以在文本中镶嵌表格,故我们可以编写混合面向行为和面向数据的测试。有趣的是,Fitnesse现在支持在表格中使用Scenario、Given、When和Then关键字,所以我们可以通过两种方式来完成工作。这是一种良性竞争。

以下是Cucumber示例,.feature文件在文本中参杂了表格:

# language: en
Feature: Addition
  In order to avoid silly  mistakes
  As a math idiot
  I want to be told the sum of two numbers

  Scenario Outline: Add two numbers
    Given I have entered <input_1> into the calculator
    And I have entered <input_2> into the calculator
    When I press <button>
    Then the result should be <output> on the screen

  Examples:
    | input_1 | input_2 | button | output |
    | 20      | 30      | add    | 50     |
    | 2       | 5       | add    | 7      |
    | 0       | 40      | add    | 40     |

编程语言

Fit和Cucumber都需要“胶合”代码,它处于高级语言和测试语言之间。在FIT,这称作固定项,在Cucumber中,称作步骤定义。Cucumber可以用C#、Java、Scala、Clojure、Groovy、Javascript、Ioke和Ruby来写步骤定义,所以在这方面Cucumber比FIT用途更广。

以下是C#编写的步骤定义,匹配上例中在计算器中输入代码的实例:

[Given(@"^I have entered (\d+) into the calculator$")]
public void EnterNumber(double n)
{
  _calculator.Push(n);
}
编辑器

FitNesse比Cucumber的优势在于Wiki支持。Cucumber目前还没有基于网页的编辑器,让非技术人员来编辑验收测试。虽然有一款工具叫Lowdown,但是它不支持表格,所以它很快就落伍了。JetBrains公司的RubyMine有合适的编辑器,但是它主要面向程序员。

InfoQ:据我所了解,Cucumber现支持在.NET下使用该工具的两种不同方式。你可以简单描述一下这两种方式以及它们的优缺点吗?

Aslak:好的。Cucumber用Ruby编写,所以它需要Ruby解析器来运行。要在.NET下运行它,首选IronRuby。如果你这么做,现在就要用Ruby编写自己的步骤定义来和.NET代码进行协作。然而,我们已经有所改变,所以你可以用以上的C#代码编写。

另一个选择是使用Cuke4Nuke。这是一款用C#编写的步骤定义工具,可以免除Ruby代码的麻烦。该工具使用MRI(Matz Ruby解析器,最初用C编写),并发送命令到本地C#网络服务器,它就会运行你的步骤定义。但对于用户来说,整个过程都是很清晰的,用户仅处理.feature文件、.cs文件和cuke4nuke命令行工具。

我还想提一下第三个项目——SpecFlow。这个一个100%的.NET项目,它和Cucumber之间不共享任何代码,但却尽可能的模仿它的行为。除此以外,它还可以集成Visual Studio。我和SpecFlow小组谈到与Cucumber的合作,我们很有可能使用相同的文件分析器。这会使得Cucumber的测试语言(Gherkin)与其它工具更好的兼容。

InfoQ:说说你对Cucumber的期望?

Aslak:

短期来说:

  • 使用更快的解析器来提升速度。我们已经在利用Ragel的Gherkin项目上取得了巨大的进展
  • 建立新站点。Wiki是很好的资源,但是需要重组信息来提高它对新来者、非Ruby编程人员和非编程人员的可访问性

长期来说:

  • 提供易于使用的协助环境来编辑和运行相关功能。现在已有RubyMine和LowDown,但是我还有一些别的想法
  • 兼容更多格式和媒介的编辑和存储能力。例如:内部网的Wiki页面或者Word文档。使FIT之前流行的原因是Excel的支持,为了获取非技术人员的关注,我们需要支持他们常用的工具。或者给他们更好的选择

InfoQ: 谢谢你接受我们的采访。

查看英文原文:Interview With Aslak Hellesøy on Cucumber For .NET

你可能感兴趣的:(采访.NET版Cucumber的创始人Aslak Hellesøy)