8

当我在瑞典观看 Scott Guthrie 的视频时,我刚刚听说了 BDD 。一位听众向 Scott 提出了有关 VS2010 和 ASP.NET MVC 如何支持 BDD 的问题。

之后,我搜索了与TDD(测试驱动开发)相比,更关注规范而不是单元测试的BDD(行为驱动开发) 。我发现了一些适用于 Ruby 和 Java 的框架。但我没有任何著名的.NET 框架。

请向我建议有关 BDD 框架及其总结 PROs/CONs 的信息。

PS。建议的 BDD 框架必须在 .NET 4、C# 4.0 和 ASP.NET MVC 2 上运行良好。

谢谢,

4

7 回答 7

13

我看到这个问题已经有了答案,我还没有尝试过 NBehave。但是,我们正在为这个相当大的企业项目使用MSpec (Machine.Specifications),它在这里对我们来说工作得很好。非常值得一提。

Rob Conery 做了一个关于 Learning BDD 的优秀视频,他在其中逐行使用 MSpec:(链接已删除,不再可用,但可以搜索)

更多关于 Rob Conery 的 MSpec 以及他使用它的原因。
http://wekeroad.com/2009/09/21/make-bdd-your-bff-2/您可能还想查看他标记为 BDD 的其他帖子。

优点:

  • 允许快速“存根”您的整个故事、场景、上下文和规范 - 无需任何实际代码。让您专注于整体“行为”,这是 BDD! 的目的,无需担心代码和编译。
  • 生成优秀的 HTML 报告,在存根规范旁边带有“<- NOT IMPLEMENTED”。我经常将这份报告交给:客户(CEO 和 CTO)、测试人员、我为项目带来的新资源,以及任何想了解软件如何工作的人——无需我展示一行代码!
  • TestDriven.NET 运行器包含在 MSpec 中,使用新的 tdnet 链接(无需设置!)。
  • [Behaviors] 属性及其 Behaves_like 委托类型使得将现有规范从一个场景复制到另一个场景变得轻而易举。

缺点:

  • 即使不需要太多文档,也几乎没有文档(观看上面的视频)。作者最近在博客上寻求有关文档的帮助。
  • 仍然是新的,只是作者的一个副项目(不是他的主要演出)。但是,在这篇文章中它非常活跃。

希望有帮助。

于 2010-01-18T06:52:19.533 回答
8

我建议尝试SpecFlow没有人提到它很奇怪。这里有一篇很棒的文章关于使用 BDD 和 Specflow 和 Asp.Net MVC它是开源的,托管在 GitHub 上

Spec flow 使用我个人非常喜欢的 GWT(Given When Then)语法。到目前为止,我们在 BDD 方面取得了巨大成功,现在尝试使用 SpecFlow 来实现。现在还为时尚早,但到目前为止一切顺利。

优点:

  1. 通过一个不错的插件集成到 VS2008 和 VS2010
  2. 使用流行的 Given When Then 词汇
  3. 使用标准 NUnit 测试运行器
  4. 功能文件让您可以简单地粘贴来自业务分析师的场景

缺点:

  1. 后面的功能代码有点难看,虽然没什么不好
  2. 据我所知,报告格式相当有限(我只使用 NUnit)

我鼓励你试一试。

于 2010-05-12T19:10:52.767 回答
6

在确定您不需要太多框架后,我构建了 StoryQ。它非常轻量级,嵌入到您现有的测试运行程序中,请访问http://storyq.codeplex.com

于 2010-02-05T17:21:10.457 回答
1

你看过NBehave吗?您可能还想看看这个老问题。但我还想补充一点,恕我直言,可以使用任何类型的单元测试框架进行 BDD。一个简单直接的方法是将您的“测试类”命名为“Given_X”,然后让所有“测试方法”具有类似“It_should_Y”的名称。

于 2009-12-25T07:18:59.090 回答
0

Storevil

重量很轻http://code.google.com/p/storevil/

于 2012-04-01T23:09:24.927 回答
0

你知道 Goiko Adzic 关于如何使用Concordion.NET以简单的英语进行 BDD 的视频吗?

http://gojko.net/2009/09/01/acceptance-testing-in-plain-english-with-concordion-net/

于 2014-05-20T18:23:37.100 回答
0

试试这个:https ://www.nuget.org/packages/Heleonix.Testing.NUnit 它适用于 NUnit,但在 Given/When/Then 和 Arrange/Act/Assert 样式中提供 JavaScript 中的 Jasmine 或 Jest 等语法

于 2018-02-07T19:53:20.680 回答