在.NET 2.0中实现BDD / TDD的最佳方法是什么?

时间:2008-08-05 12:50:16

标签: c# .net testing tdd bdd

我想在我的应用程序中添加一个测试套件,但是我无法转向.NET 3.5的新测试框架。

有没有人建议使用好的测试框架?

12 个答案:

答案 0 :(得分:9)

NUnit和Rhino非常适合,auto-mocking container可能很有用。

如果您正在查看BDD,那么NBehave可能是一个不错的选择。但是,如果您只是指与单元测试(xSpec)相关的BDD风格,虽然您可以通过添加框架(虽然像specunit之类的东西添加一些synctactic糖),但您可能想看{ {3}}也很有趣。

答案 1 :(得分:8)

我们使用MbUnitRihno Mocks,他们证明可以很好地协同工作。在进行TDD时,您几乎肯定需要进行某种形式的依赖注入,而这可以手动完成,值得查看IoC容器,例如Castle Windsor

值得一看的是John Paul Bodhood的电视剧,以帮助您入门。 JPB's Blog

答案 2 :(得分:7)

使用MSpec查看Rob Conery在BDD上的截屏视频。非常令人印象深刻的http://blog.wekeroad.com/mvc-storefront/kona-3/

编辑:我现在使用这种方法:http://10printhello.com/the-one-bdd-framework-to-rule-them/

答案 3 :(得分:4)

对于模拟对象库,我发现获得BSD许可的Rhino.Mocks非常讨人喜欢。

答案 4 :(得分:4)

我也使用NUnit取得了巨大的成功。

当需要模拟对象时,我也使用了NMock。另外,创建模拟对象的工厂称为Mockery。

为了便于单元测试的运行,我使用TestDriven.NET来编译单元测试。此外,我使用Cruise Control .NET来观察SVN并检查每个新提交是否构建并通过所有单元测试。

答案 5 :(得分:4)

这可能是对已经说过的内容的总结,但对于TDD,我个人使用Rhino Mocks和MBUnit。 Rhino Mocks是一个免费和开源的模拟框架。 Rhino Mocks的优势在于我们不需要像在NMock中那样使用魔术字符串来设置您的期望。

我喜欢MBUnit,因为MbUnit具有RowTests的概念,允许您改变测试方法的输入。 MBUnit也是免费提供的。

您还需要确保CI(持续集成服务器)支持您为单元测试框架选择的任何内容。 Cruise Control.NET默认支持Nunit,你需要做一些额外的工作才能让MBUnit在ccnet中工作。

从IDE的角度来看,您必须拥有TestDriven.NET。 TestDriven.NET允许您在IDE中右键单击并运行测试,它支持MBUnit和Nunit等。

NBehave是我用过的BDD库。我没有使用过任何其他内容,因此我无法与您进行比较和对比,但是MBeit团队的Gallio支持NBehave,这意味着您可以像使用TestDriven.NET进行单元测试一样运行BDD测试。

我也强烈推荐Resharper。通过这种重构和指导工具,您将发现您的工作效率显着提高。在您开发测试时,它将帮助您更改代码。

希望这有帮助

答案 6 :(得分:3)

NUnit 可在http://www.nunit.org找到 即使在MS堆栈上工作,我也会建议这样做 - 非MV框架的支持发生在MVC预览中,它显示了正确方向的明确移动,允许我们所有人都自定义我们的堆栈以适应。

答案 7 :(得分:3)

将nUnit与TFS一起使用并不困难。甚至还有一个关于codeplex的项目来实现这个:NUnit for Team Build甚至将结果“发布”到仓库。

我还没有尝试过 - 但我会建议那些有兴趣实施TFS继续使用nUnit而非尝试的nUnit投资大(或者对MSTest工具有强烈偏好)的客户转换他们现有的所有测试。

答案 8 :(得分:3)

我将不得不为Moq大声喊叫。它是干净轻巧的模拟框架,有助于引导您进入成功的陷阱。

TFS中内置的测试工具没问题,他们可以完成工作,但使用起来往往有点麻烦。生成的报告,代码覆盖率和其他一些部分特别糟糕,它们会让你在22岁而不是50岁时秃顶。

如果您真的喜欢测试,请考虑尝试一些持续集成。您将很快感受到回归带来的痛苦,并可能帮助您更快地达到最终目标。

如果你有时间,不管你做了什么,试试看哪一个是最自然的。祝你好运,编码愉快。

答案 9 :(得分:2)

NUnit一直是我的最爱。但是,如果您使用TFS作为源代码控制,我建议您坚持使用Microsoft Stack。

答案 10 :(得分:2)

我建议如下:

TestDriven.NET - VS的单元测试附加功能,与所有主要的单元测试框架完全集成,包括NUnit,MbUnit等......

Typemock Isolator - .Net Unit Testing的模拟框架

NUnit - C#中的开源单元测试框架。

答案 11 :(得分:2)

对于我的项目,我使用NUnit和TestDriven.NET取得了巨大成功。您可以创建一个单独的库来托管您的测试代码,也可以将它放在您的可执行文件或库中。如果您希望生产代码与测试代码交织在一起,则完全取决于此。

对于依赖注入,我在当前项目中使用NInject并且它的工作非常好。如果使用构造函数注入,则不需要使用[Inject]属性来混淆代码。

我没有为我的.NET 2.0项目使用模拟库,但是对于另一个.NET 3.5项目,我将使用Moq

请注意,所有这些都适用于.NET 2.0及更高版本。 (除了Moq)