我应该从Visual Studio 2008中的C#开始使用哪个单元测试框架?(Windows窗体应用程序)

Gre*_*reg 9 c# nunit unit-testing visual-studio-2008

问题 - 如果我使用Visual Studio 2008在C#中启动Windows窗体应用程序,我应该使用哪个单元测试框架?

VS2008似乎有一个版本?或者我应该看看像NUnit这样的东西?或者是NUnit在发动机罩下的VS2008中使用了什么?什么是最受欢迎的.

拥有允许以下内容的东西会很好:(a)模拟/存根,以及(b)断言异常的能力

谢谢

Chr*_*sal 8

我建议您使用NUnit作为测试框架.如果你需要在构建服务器上设置它,它非常轻巧,易于出货.使用MSTest不是这种情况.至于模拟/隔离框架,Rhino Mocks拥有最大的用户群,你可能会最快地找到Rhino Mocks的问题答案.

  • NUnit也在Mono上运行 (2认同)

Dal*_*ale 5

如果它只是一个简单的应用程序,VS2008中内置的MSTest框架应勾选所有框.它与NUnit不同,虽然很多人(错误地)将它称为它们是同一个东西.

我从来没有用它来嘲笑,所以也许其他人可以详细说明.它在您的解决方案中生成一个单独的项目,仅用于测试目的.这是如何使用它的一个很好的解释.

替代文字

编辑: 进行更多挖掘,我遇到了MSTest和NUnit的比较.

NUnit框架的缺点:

  • NUnit的安装在一个单独的MSI中.
  • 没有与Visual Studio集成.
  • 需要手动编写测试用例.
  • 没有自动生成代码.
  • 需要打开单独的窗口(NUnit Console或GUI)来执行测试用例.
  • 排序测试用例执行不可用.
  • 没有内置功能来调试测试用例.
  • 没有内置功能来启用/禁用测试用例.
  • 没有内置功能可以提供有关堆栈跟踪,跟踪信息等测试用例的其他信息.
  • 没有内置功能可根据计算机名称,类名称和主机类型等对测试用例进行排序.

这是我链接的比较文章.

我从来没有使用过NUnit,只有MSTest用于C#和JUnit用于Java,所以我在这方面有点偏颇.对于WinForms来说,MSTest一直非常适合我,它的功能包括能够单独运行测试,显示非常详细的报告(使用单独的跟踪日志)并自动生成所有样板测试代码并执行所有使VS2008成为这样的事情一个出色的IDE.通过它的声音,NUnit对其他人来说效果很好,他们有理由为什么喜欢它.

除非你有特别的理由采取NUnit/Testdriven.NET方法,就像你需要一个特定功能,或者你只是喜欢设置测试并试图将它集成回VS的方式,那么我没有看到任何理由不要只使用开箱即用的MSTest.

  • 我也是一个TDD人,我看到这个答案已被多次投票.我并不是要打扰独眼的NUnit狂热分子,只是解释一下我使用过的东西以及它为什么适合我,特别是Winforms应用程序.比较来自我链接的网站.除了Gishu之外,NUnit确实可以在测试失败时打印堆栈跟踪(这似乎有点关键)其余的只是NUnit以不同方式执行操作的意见或理由. (5认同)
  • 哎哟.600个字符是不够的.那很好.我可以在任何(构建/ QA)机器上运行我的测试,而无需安装VSTS.2.如果要右键单击并运行测试,请获取Resharper/TestDriven.Net加载项.另见SO q#196740.#3,4,6,10 - 没有意义.我相信程序员比VS更了解他们的代码.因此,他们可以更好地确定要编写的测试.但后来我被测试感染了(读TDD狂热者).测试用例不应该依赖于顺序 - 所以不确定为什么这是一个缺点. (4认同)
  • Contd ...可以完成调试测试用例(将nunit添加为外部exe以调试测试dll); 虽然这意味着你不再知道你的代码了.对测试用例进行排序 - 再次不确定为什么需要它.但是您可以将测试分组为[类别("慢速测试")]等类别,然后在测试运行中包含或排除它们.您还有一个复选框视图,您可以在其中手动勾选要运行的测试.最后9. stacktrace - nunit在第一个标签中执行此操作.如果单元测试框架没有指向测试失败的确切位置,那么单元测试框架就会有点瘫痪! (2认同)
  • "NUnit的安装在一个单独的MSI中." 您只需从项目中引用程序集即可.这就是我一直使用它的方式. (2认同)

Ste*_*eve 5

我们从MSTest开始.它具有(轻度)难以在NUnit中复制的优点.它允许您访问该类的私有成员.当您检查状态时,这是非常宝贵的.例如,假设我有一个函数将条目放入未公开的字典中.我的理解是,对于NUnit,你必须使用反射来获取字典,或者为了测试而添加一个getter.在这里,您可以查看字典.非常简单,非常干净.它还允许您测试我喜欢的私人功能(我知道有些人不相信这一点).虽然我不喜欢MSTest,但该功能使测试变得更加容易.

VS集成也很不错.

  • 我们同意在这一点上意见不一致.我的课程持有东西,并有状态.我需要找到一种方法来检查该状态而不调用其他函数(如果我可以帮助它).我已经编写了"完美"类,其中每个函数都是自包含的,并且几乎没有状态,但我无法为实际执行操作的类执行此操作. (2认同)