C# 什么';在.NET2.0中实现BDD/TDD的最佳方法是什么?

C# 什么';在.NET2.0中实现BDD/TDD的最佳方法是什么?,c#,.net,testing,tdd,bdd,C#,.net,Testing,Tdd,Bdd,我希望在我的应用程序中添加一个测试套件,但是我不能转移到更新的.NET3.5测试框架 有人对好的测试框架有什么建议吗?NUnit一直是我的最爱。但是,如果您使用TFS作为源代码管理,我建议您坚持使用Microsoft堆栈。对于模拟对象库,我发现BSD许可非常令人满意。NUnit可在 即使在使用MS stack时,我也会建议这样做——MVC预览版中出现了对非MS框架的支持,这显示了一个明确的方向,允许我们所有人定制适合自己的堆栈。我在使用方面也取得了巨大成功 当需要模拟对象时,我也使用了。作为额外

我希望在我的应用程序中添加一个测试套件,但是我不能转移到更新的.NET3.5测试框架


有人对好的测试框架有什么建议吗?

NUnit一直是我的最爱。但是,如果您使用TFS作为源代码管理,我建议您坚持使用Microsoft堆栈。

对于模拟对象库,我发现BSD许可非常令人满意。

NUnit可在
即使在使用MS stack时,我也会建议这样做——MVC预览版中出现了对非MS框架的支持,这显示了一个明确的方向,允许我们所有人定制适合自己的堆栈。

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

当需要模拟对象时,我也使用了。作为额外的好处,创建模拟对象的工厂称为模拟

为了方便单元测试的运行,我曾经在编写代码时运行单元测试。此外,我还经常观察SVN,并检查每个新提交是否构建并通过所有单元测试。

我们使用,并且它们证明能够很好地协同工作。在进行TDD时,您几乎肯定需要进行某种形式的依赖注入,虽然这可以手动完成,但值得一看IoC容器,例如


很值得一看约翰·保罗·博胡德的演员阵容,让你开始吧

将nUnit与TFS结合使用并不太困难。codeplex上甚至有一个项目来实现这一点:它甚至将结果“发布”到仓库


我没有尝试过,但我建议那些对nUnit有大量投资(或者对它有强烈偏好,而不是MSTest工具)的客户,如果他们有兴趣实施TFS,可以继续使用nUnit,而不是尝试转换他们现有的所有测试。

nUnit和Rhino很适合,并且可能会感兴趣


如果你也在考虑BDD,那么这可能是一个不错的选择。然而,如果你只是指与单元测试(xSpec)相关的BDD风格,尽管你可以通过添加框架(尽管确实添加了一些同步功能),但你可能想看看它也很有趣。

我不得不为它大喊一声。它是一个干净的轻描淡写的框架,引导你进入成功的深渊

TFS内置的测试工具还可以。他们会完成工作,但通常会有点麻烦。生成的报告、代码覆盖率和其他一些部分尤其糟糕。他们让你在22岁时秃顶,而不是50岁

<>如果你真的喜欢测试,试着尝试一些持续的集成。你会很快感受到回归带来的痛苦,这种痛苦可能会帮助你更快地达到最终目标


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

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

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

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

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

NBEHAD是我使用过的BDD库。我没有使用任何其他工具,因此无法将它们与您进行比较和对比,但NBEHAD得到了MBUnit团队Gallio的支持,这意味着您可以像使用TestDriven.NET运行单元测试一样运行BDD测试

我也强烈推荐Resharper。您会发现,使用此重构和指导工具,您的生产率显著提高。它将帮助您在开发测试时更改代码


希望这能有所帮助

我建议如下:

TestDriven.NET-VS的单元测试插件,与所有主要单元测试框架(包括NUnit、MbUnit等)完全集成

Typemock隔离器-一个用于


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

请查看Rob Connery使用MSpec在BDD上的屏幕广播。印象深刻


编辑:我现在使用这种方法:

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

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

我还没有为我的.NET2.0项目使用模拟库,但我将为另一个.NET3.5项目使用模拟库


请注意,所有这些都适用于.NET2.0及更高版本。(Moq除外)

NMock过度使用魔术字符串使得它成为模拟框架的一个糟糕选择。Rhinomock或Moq是更好的选择,因为它们依赖于强类型。Moq的问题是它需要.NET 3.5,因为它使用lambda表达式和表达式树。这不一定是一件可怕的事情,但你是对的,这会阻碍v2.0的发展。