2

这里有很多关于 NUnit 与 MSTest 的问题,我已经阅读了其中不少。我认为我在这里的问题略有不同,可以单独发布。

当我开始使用 C# 时,我什至从未考虑过查看 MSTest,因为我以前使用 C++ 时已经习惯了没有它可用。我基本上忘记了这一切。:) 所以我从 NUnit 开始,并且喜欢它。测试很容易设置,测试也不是很痛苦——只需启动 IDE 并运行测试!

正如这里的许多人所指出的,NUnit 经常更新,而 MSTest 的更新频率与 IDE 一样。如果您不需要处于 TDD 的前沿(我不是),这不一定是个问题,但我经常更新的问题是让所有系统保持最新。我每天使用大约四五台不同的 PC,虽然更新它们并不是什么大不了的事,但我希望有一种方法可以让我的代码在具有旧版本 NUnit 的系统上正确编译。由于我的项目引用了 NUnit 安装文件夹,所以当我升级框架时,任何安装了旧框架的计算机将不再能够编译我的项目。我试图通过在 SVN 中创建一个只有 NUnit DLL 的通用文件夹来解决这个问题, 有没有办法解决这个问题? 这就是让我第一次停止使用的原因。

然后有一天我想起了 MSTest,并决定试一试。我喜欢它被集成到 IDE 中。CTRL-R,CTRL-A,所有测试运行。多么简单!但后来我发现 MSTest 中可用的测试类型非常有限。我不知道我真正需要多少,但我想我应该回到 NUnit,我做到了。

大约现在我开始必须调试单元测试,而我能弄清楚如何在 NUnit 中进行调试的唯一方法是将 NUnit 设置为启动应用程序,然后在我的测试中设置断点。然后在 NUnit GUI 中,我将运行测试以达到断点。这是一个完整的 PITA。然后我再次查看 MSTest GUI,发现我可以在此处单击 Debug,它会执行我的测试!哇!现在,这是让我重新支持 MSTest 的杀手级功能。

现在,我回来使用 MSTest。不幸的是,今天我开始考虑日常构建并在 Tinderbox 上进行了一些搜索,这是我之前听说过的唯一用于此类事情的工具。这让我对其他工具如 buildbot 和 TFS 大开眼界。所以这里的问题是,我认为 MSTest 可以保证将我锁定在 TFS 中,以进行自动化的日常构建、持续集成或任何流行语。我的公司无法承受仅限于 MS 的解决方案(VS 除外),因此我想研究其他选择。

我很高兴回到 NUnit。我对重写 100 多个单元测试并不感到兴奋,但事情就是这样。但是,我真的很想有人解释如何解决我的这两个问题,总结起来是:

  1. 如何设置 NUnit 和我的项目,这样我就不必在每个系统上不断升级它来构建我的项目?
  2. 如何更轻松地调试单元测试?我的方法很痛苦,因为我必须在 NUnit 和默认应用程序之间切换来测试/运行我的应用程序。我在 SO 上看到一篇帖子,在 codeplex 上提到了 NUnitIt,但我对此没有任何经验。

更新——我正在比较我的开发虚拟机中的东西,到目前为止,NUnitit 非常好。它很容易安装(一键),我只需将它指向我的 SVN 外部文件夹中的任何 NUnit 二进制文件。不错!我还进入了 VS -> 工具 -> 选项 -> 键盘,并将我的 CTRL-R、CTRL-A 映射更改为映射到 NUnitit.Connect.DebugGUI。不完美,因为我还没有弄清楚如何让 NUnit 在打开时自动运行测试,但它非常好。现在调试工作正常!

更新 #2——我安装了 TestDriven.Net 并快速运行。总的来说,我比 NUnitit 更喜欢它,但目前,NUnitit 获胜是因为它是免费的,而且由于它也可以与 NUnit 一起使用,它可以让我在时机成熟时“升级”到 TestDriven.Net。我最喜欢 TestDriven.Net 的一点是,当我双击失败的测试时,它会将我带到测试中失败的那一行,而 NUnit + NUnitit 似乎无法做到这一点。有没有人能够在 NUnit GUI 和 VS IDE 之间建立这种联系?

4

3 回答 3

2

为了更轻松地调试(和运行)单元测试,我建议查看TestDriven.Net。“Test With > Debugger”功能非常方便。个人版是免费的。

于 2010-03-03T17:00:15.423 回答
2

我从事的许多项目都在其源代码管理的“lib”或“extrernal”或“libraries”文件夹中包含了特定版本的 NUnit(或 xUnit.net,等等)的副本,并引用该位置进行构建他们所有的测试。这大大减少了“升级每个人”的头痛,因为你真的不需要安装NUnit 或 xUnit.net 来使用它。

这种方法仍然允许您使用诸如 TestDriven.Net 之类的东西来执行测试,在调试器中运行测试等。

于 2010-03-03T17:05:20.643 回答
0

你玩过 NUnit.framework 参考上的“特定版本”属性吗?我们保持设置为 true,以便为给定 nunit 版本编码的测试需要执行该特定版本。

我不确定它将如何处理,例如,如果您的机器上有 2.5 但另一台机器只有 2.4 - .NET 会愉快地绑定到 2.4 版本,还是只会从早期版本绑定到程序集的更高版本(例如针对 2.4 编译,但 2.5 在运行时可用?)

于 2010-03-03T16:59:46.510 回答