什么是最成熟的.NET BDD框架?

时间:2008-11-21 04:46:50

标签: .net automated-tests bdd

我们一直在使用BDD - Behaviour Driven Development(来自Dan North的观点)作为记录用户验收测试并推动几个项目开发的机制,取得了不错的成功。到目前为止,我们实际上并没有实际自动化测试。

我现在正在考虑自动化测试,但我不确定要支持哪种行为框架。到目前为止,NBehave似乎是先行者 - 但还有其他我应该关注的吗?目前是否有明确的“赢家”?

13 个答案:

答案 0 :(得分:332)

答案 1 :(得分:47)

查看SpecFlow

这是一款受Cucumber启发的工具,旨在为.NET项目的验收测试驱动开发和行为驱动开发提供一种实用且无摩擦的方法。

VisualStudio集成似乎特别有希望。

答案 2 :(得分:15)

StoryQ看起来像是一个很好的替代NBehave的Fluent界面。我肯定会检查出来。

答案 3 :(得分:12)

我不认为真的有'胜利者'。其他框架包括SpecUnit.NET项目,MSpec也显示了Gallio适配器开头的承诺。从技术上讲,自从IronRuby即将到来之后,rSpec 可能成为那些准备进入前沿的人的选择。 NBehave + NSpec可能是最好的自动化框架,尽管我发现自己正在反对过于冗长的语法。

我会全力检查它们并选择最适合您项目风格的框架。它们都是OSS,所以它很难输,真正的好处只是转向BDD。

答案 4 :(得分:7)

我个人会推荐BDDfy,这在我看来很棒!它是开源的,支持常规和流畅的场景描述,涵盖了很好的接受和单元测试。您可以在GitHub上找到它。

答案 5 :(得分:6)

Robot Framework也可以与IronPython一起用于.Net中的ATDD或BDD。我认为Robot Framework的表达能力比例如。 SpecFlowNSpec。它不会强制您使用某种语法,而是使用关键字驱动的方法。如果您正在测试Web应用程序,它有Selenium2Library,它提供了与Selenium WebDriver的绑定。

答案 6 :(得分:5)

还有Specter,它定义了Boo中的DSL以使其更加自然。

答案 7 :(得分:4)

我通常会支持NBehave,结合MbUnit以及您需要的任何DI /模拟框架。 Jim Burger公平地评论说NBehave非常冗长,我发现自己有时会使用剪切和粘贴。不过,它运行得很好 - 我正在使用Gallio的ReSharper插件,所以我只是得到一个额外的窗口显示。但是,还没有尝试使用ccnet。

答案 8 :(得分:2)

查看此博客文章及其评论,以获得鼓舞人心的想法:http://haacked.com/archive/2008/08/23/introducing-subspec.aspx/

答案 9 :(得分:2)

Concordion.NET不仅支持BDD,还支持ATDD:http://assertselenium.com/2012/11/05/difference-between-tdd-bdd-atdd/ Specifications are written in plain English使用HTML。恕我直言,这是Concordion.NET的好处之一。可以将HTML文档组织成可导航的结构以构建living documentation system。而且,由于测试是针对系统运行的,因此您可以确信文档始终是最新的。

答案 10 :(得分:1)

我开始在BDD首次参加我的团队的小型应用程序。我们选择执行此工作的工具包括:针对xBehave故事的Selenium Webdriver和针对我们的xSpec单元测试的自动锁定容器的Machine.Fakes.Moq的MSpec的Specflow。由于Specflow和MSpec支持的集成,Resharper既是我们的故事跑者又是规格跑者。使用R#本地集成到visual studio中是我们的一个关键特性。

由于我们的设计都是MVC3,我们也将应用orchestrator separation pattern to our MVC controllers。这将允许我们直接针对协调器编写规范。然后让我们直接针对我们的应用程序使用来编写故事。

答案 11 :(得分:1)

由于我现在正在处理BDD以进行安全关键应用程序的系统测试,我只能分享我的经验,你不应该低估用自然语言编写的测试的力量"而不是"代码"。

我们一直专注于提供一种功能语言,任何人都可以在没有任何技术背景或编程经验的情况下理解(参见上面的specflow示例),我们做得很好。除了我从未向任何人解释语法之外,每个人都立即理解测试,开发人员,经理甚至测试人员的意义。

我会以任何方式避免用编程语言编写的测试,例如上面的MSpec示例。如果我在经理办公室出现这样的测试,他会把我踢出去。但他有兴趣阅读基于Gherkin-Syntax的测试。能够阅读和修改测试的人越多越好。

最后但并非最不重要的是,这些测试可以移植到任何其他编程语言,任何其他平台,任何其他测试自动化工具,而无需任何更改。

同样,答案还有一次:

不要关心工具及其功能本身,选择一种工具,让您可以随时轻松切换到其他工具而不会丢失信息。工具来来去去,我的测试应该持续更长时间。 : - )

我可以推荐使用SpecFlow。您可以完全访问完整的.Net库及其所有功能,您的测试可以保持便携。如果您不介意可移植性,这可能会使您比完全可移植的解决方案(如机器人框架)更具优势。但是,通过使用不同的工具进行开发和测试,您始终可以提高系统的稳定性和可移植性。因此,在某些情况下,使用基于python的BDD方法测试.Net软件可能是一个好的(甚至更好的)。

然而,SpecFlow在每天测试中都显示出稳定和防弹,包括在中型项目中进行夜间构建测试等。此外,它还可以很好地集成到Microsoft单元测试环境中。

答案 12 :(得分:0)

另请查看UBADDAS,特别是

中找到的UAT

https://github.com/KernowCode/UBADDAS

这里有解释

http://kernowcode.wordpress.com/(2014年6月)

你可以写一个像这样的测试

[Test]
public void IWantToRegisterANewUser()
{
  var user = new User();
  ICustomer customer = new Customer();

  SoThat(MyBusinessValue.IncreaseCustomerBase)
    .As(user)
    .Given(customer.Register)
    .When(customer.Confirm_Registration)
    .Then(customer.Login);
}

并生成此

I want to register a new user
  so that Increase customer base
       as user
    given Register customer
     when Confirm customer registration
     then Login customer