有没有适用于.NET的“高级”测试框架?

4
我正在寻找一种测试框架,它能够实现以下功能:
1. 不同种类(分类)的测试。我希望能够只运行“快速”的所有测试或所有“缓慢”的测试。我知道MSTest允许您创建列表并运行它们,但我觉得这很烦人和分散注意力。我想在开发时标记测试用例属性,然后有一个像下拉框一样的工具,可以让我选择要运行哪种类型的测试。我还知道,如果我有更慢的测试,我可以使用MSTest对它们进行排序,以便在完成更快的测试时可以查看它们。但随着测试越来越多,这只是一种“hack”,会变得非常混乱。
2. 顺序运行测试。当我说顺序运行测试时,我并不是指它们相互依赖,我只是想说当我需要测试GUI时,不能同时运行2个测试。
3. 允许有多个测试彼此依赖。这意味着,如果测试A失败,在某些情况下,我希望不需要运行测试B或C。
4. 在Visual Studio中有某种支持。我目前总是执行CTRL+B/CTRL+R A(构建/运行测试)。所以每2分钟都必须去另一个应用程序查看(即使它是从VS IDE启动的),这听起来不是一个好的解决方案。
是否有什么能够实现这些功能的工具?我发现,在测试和TDD方面趋势如此之高的情况下,我们手头的工具仍然如此原始和粗糙,这让我感到尴尬。

3
你尝试过使用NUnit吗?我听说它备受推荐。 - Raynos
顺便提一下,在你按Ctrl+R+T之前,你不需要按Ctrl+B,任何测试所依赖的项目都会在运行测试时自动构建。 - Jonny Cundall
6个回答

4

例如,MSTest 不会按顺序执行测试。 - devoured elysium
@devoured elysium:已编辑。所有我知道的其他测试运行器默认都会这样做。 - Mauricio Scheffer
我还没有机会尝试MbUnit,但我关心的是拥有分类的好处,可以只运行某些测试而不必运行所有测试。 MbUnit是否支持此功能?MSTest也有分类,但没有任何简单的方法只需单击即可运行“类别A”测试或“类别B”测试,这就是我正在寻找的功能。 - devoured elysium
1
@devoured elysium:您似乎将测试运行程序测试框架混淆了。VS测试运行程序不支持类别,但TestDriven.Net支持:http://weblogs.asp.net/nunitaddin/archive/2008/12/03/testdriven-net-options-pane.aspx - Mauricio Scheffer

3

VS的单元测试可以进行1、2和4。

不同种类(分类)的测试。

您可以通过添加多个“测试设置”项来创建多个测试列表,每个列表可以运行不同的配置或不同子集的测试。

按顺序运行测试。

您可以控制并发级别,包括将其设置为1。(这需要编辑XML文件,但在MSDN上有介绍)。

Visual Studio中对所有这些都有一定的支持。

这很容易。

让几个测试相互依赖的选项。

这很难,因为TDD最佳实践是测试应该是独立的工具似乎默认这一点。

在一个测试类中保留标志,并立即退出未满足条件的测试。


正如我在原帖中所述,我不想创建不同的测试列表。对于每个新的测试,我都必须去更新测试列表等等。迟早有一天,我要么会忘记添加测试,要么会厌倦这样做。 - devoured elysium
在一个测试类中,保留标志并立即退出未满足条件的测试。例如,在 MSTest 中,每个测试在不同的类实例上运行,你如何实现这一点?通过使用单例模式吗? - devoured elysium
吞噬静态字段是显而易见的选择。 - Richard
我一直在 MSDN 上查找那个 XML 选项,但是我找不到。你是否碰巧知道我需要编辑哪个 XML?谢谢。 - devoured elysium
@Devoured "如何使用具有多个 CPU 或核心的计算机更快地运行单元测试": http://msdn.microsoft.com/zh-cn/library/ee921484.aspx - Richard
显示剩余2条评论

1

NUnit

  1. 分类 - 您可以使用 [Category("SomeName")] 标记测试夹具,然后使用类别名称将其包含/排除在测试运行中
  2. 顺序 - 这是大多数 xUnit 框架的默认设置。开箱即用
  3. 测试依赖项:查看此问题以获取更多信息-Tests dependent on commonly used functionality with NUnit。目前在 NUnit 中不受支持-但请查看评论以查看任何解决方法是否适用于您
  4. VS 集成 - 对于明显的原因,这对于 MS-Test 是必须的。对于 NUnit,您需要安装一些插件,例如我使用 Resharper 5.1(商业付费)

你也可以在4上使用TestDriven.Net。话虽如此,正如你所说,ReSharper做得很好,而且还有很多其他功能,所以它可能是更好的选择。 - Mathias

1

如果你使用resharper,应该使用Gallio
它支持任何你可能选择的框架。
它将大大提高你的生产力。


1
  1. 这是 Gallio,不是 Galileo。
  2. Gallio 只是一个测试运行器,OP 正在寻找具有特定功能的框架。
- Mauricio Scheffer
很抱歉名字拼错了,我会改正。 OP 寻找的其中一个功能就是能够在 VS 中运行测试的可能性。使用 Gallio 对于他选择的任何框架都没有问题。 这是相关的。 - the_drow

1

使用MSTest(一些选项可帮助解决问题)

您可以使用TestCategory属性设置测试类别,然后在测试列表编辑器的顶部使用过滤器选择所需内容。

您还可以通过右键单击项目/文件夹,点击顶部的“新建测试”并选择其中一个选项来创建有序测试列表。然后,您可以添加和排序批处理中的测试,并按顺序运行它们,如果序列中的一个失败,则可以选择性地使其余测试失败。

我的测试一直在按顺序运行,因此正如其他人提到的那样,您可能只需要将并发设置为1,但我自己没有这样做。


0

使用MSTest

第一点:不同种类(类别)的测试

如果您拥有ReSharper,您可以根据TestCategory在其测试运行中对测试进行分组。(如果您没有ReSharper,强烈建议您使用它。您可以免费试用30天以尝试它)。

如果您没有ReSharper,则可以使用[Priority(int)]属性,在Visual Studios测试运行器中进行分组。

不幸的是,使用优先级,您无法在单个测试上拥有多个标签。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接