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

时间:2020-03-05 18:37:43  来源:igfitidea点击:

我希望向我的应用程序中添加一个测试套件,但是我无法使用针对.NET 3.5的较新测试框架。

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

解决方案

回答

NUnit一直是我的最爱。但是,如果我们将TFS用作源控件,建议我们坚持使用Microsoft Stack。

回答

对于Mock Object库,我发现BSD许可的Rhino.Mocks相当令人满意。

回答

NUnit可从http://www.nunit.org获得。
我建议即使在MS堆栈上工作时,在MVC预览中仍在支持非MS框架,该框架显示了朝正确方向的明确运动,使我们所有人都可以自定义适合自己的堆栈。

回答

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

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

为了促进单元测试的运行,我使用了TestDriven.NET来按我的代码运行单元测试。另外,我已经使用Cruise Control .NET来监视SVN,并检查每个新的提交都建立并通过了所有单元测试。

回答

我们使用了MbUnit和Rihno Mocks,它们被证明可以很好地协同工作。在进行TDD时,几乎可以肯定需要进行某种形式的依赖注入,尽管这可以手动完成,但值得一看的是IoC容器,例如Castle Windsor。

值得一看的是John Paul Bodhood的屏幕截图,以入门。 JPB的博客

回答

在TFS中使用nUnit并不困难。甚至在codeplex上有一个项目可以实现此目的:NUnit for Team Build甚至可以将结果"发布"到仓库。

我还没有尝试过,但是我建议那些对nUnit感兴趣的人(对MSTest工具有很大的投资)(或者对MSTest工具有强烈的偏好),并希望继续使用nUnit,而不是尝试转换所有现有的测试。

回答

NUnit和Rhino非常适合,并且可能需要关注自动模拟容器。

如果我们也正在查看BDD,那么NBehave可能是一个不错的选择。但是,如果我们只是说与单元测试(xSpec)相关的BDD样式,尽管我们可以不必添加框架(尽管specunit之类的东西确实会添加一些合规性糖),但是我们可能想看看MSpec也很有趣。

回答

我将不得不为起订量大喊大叫。这是干净的轻型模拟框架,可引导成功。

内置在TFS中的测试工具还可以,它们可以完成工作,但使用起来通常很麻烦。生成的报告,代码覆盖率和其他一些部分特别糟糕,它们使我们开始秃头,而不是50点。

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

无论我们做什么,只要有时间,就尝试一些方法,看看哪一种是最自然的。祝你好运,编码愉快。

回答

这可能是已经讲过的内容的摘要,但是对于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库。我没有使用任何其他工具,因此无法与我们进行比较和对比,但是NBehave受MBUnit团队的Gallio支持,这意味着我们可以像使用TestDriven.NET进行单元测试一样运行BDD测试。

我也强烈推荐Resharper。使用此重构和指导工具,我们会发现生产率得到了显着提高。在开发测试时,它将更改代码。

希望这可以帮助

回答

我建议以下内容:

用于VS的TestDriven.NET单元测试插件已与所有主要的单元测试框架完全集成,包括NUnit,MbUnit等。

Typemock Isolator.Net单元测试的模拟框架

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

回答

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

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

回答

在我的项目中,我成功使用了NUnit和TestDriven.NET。我们可以创建一个单独的库以仅承载测试代码,也可以将其放入可执行文件或者库中。这完全取决于我们是否希望将生产代码与测试代码交织在一起。

对于依赖注入,我在当前项目中使用了NInject,它的工作很棒。如果使用构造函数注入,则不需要使用[Inject]属性使代码混乱。

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

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