【问题标题】:Is there any "advanced" testing framework for .NET?.NET 是否有任何“高级”测试框架?
【发布时间】:2010-08-25 13:31:59
【问题描述】:

我正在寻找一个可以让我拥有的测试框架:

  1. 不同种类(类别)的测试。我希望能够运行所有“快速”测试或所有“慢速”测试。我知道 MSTest 允许您创建列表并运行然后运行它们,但我发现它很烦人和分散注意力。我想在开发测试时用属性标记测试,然后有一个类似组合框的东西,让我选择我想运行的测试类型。我也知道,如果我有较慢的测试,我可以使用 MSTest 对它们进行排序,这样我就可以看到较快的测试何时结束。这当然只是一种“破解”,随着您进行越来越多的测试,它会变得一团糟。
  2. 按顺序运行测试。 当我说按顺序时,我并不是说它们相互依赖,我只是说因为我必须测试 GUI,所以我不能同时运行 2 个测试.
  3. 可以选择让多个测试相互依赖。这意味着如果我有一个测试 A 失败,在某些情况下,我什至不想尝试运行测试 B 或 C。
  4. 在 Visual Studio 中对所有这些都有某种支持。我目前一直在做 CTRL+B/CTRL+R, A(构建/运行测试)。因此,每 2 分钟必须去查看另一个应用程序(即使它是从 VS IDE 启动的)听起来不是一个好的解决方案。

有什么可以做到这一点的吗?我觉得尴尬的是,在所有围绕测试和 tdd 的趋势下,我们可以使用的工具仍然如此原始和原始。

【问题讨论】:

  • 你试过 NUnit 吗?我听说它强烈推荐。
  • 顺便说一句,您不需要在 ctrl R + T 之前按 ctrl + B,您的测试所依赖的任何项目都将在您运行测试时自动构建

标签: .net visual-studio unit-testing tdd testing


【解决方案1】:

MbUnit

【讨论】:

  • MSTest 例如,不按顺序进行测试。
  • @devoured elysium:已编辑。我认识的所有其他测试运行者都默认这样做。
  • 我仍然没有机会尝试 MbUnit,但我在拥有类别时关心的是只允许运行某种测试,而不是必须运行所有测试。 MbUnit 有可能吗? MSTest 也有类别,但它没有任何简单的方法可以一键运行“A 类”测试或“B 类”测试,而这正是我正在寻找的功能。
  • @devoured elysium:您似乎将 test runnerstest framework 混淆了。 VS 测试运行器不支持类别,但 TestDriven.Net 支持:weblogs.asp.net/nunitaddin/archive/2008/12/03/…
【解决方案2】:

VS 的单元测试做了 1、2 和 4。

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

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

按顺序运行测试。

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

在 Visual Studio 中为所有这些提供某种支持。我

这很简单。

可以选择让多个测试相互依赖。

这很难,因为 TDD 的最佳实践是让测试成为独立的工具似乎假设了这一点。

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

【讨论】:

  • 正如我原来的帖子中所述,我不想创建不同的测试列表。对于每个新测试,我都必须去更新测试列表和blablabla。迟早,我要么忘记添加测试,要么厌倦必须这样做。
  • “在一类测试中保留标志并立即退出未满足条件的测试。”。例如,在 MSTest 中,每个测试都在一个类的不同实例上运行,你怎么能做到这一点?通过使用单例?
  • @Devoured 静态字段将是显而易见的选择。
  • @Devoured 写这篇文章后注意到有 TestCategoryAttribute msdn.microsoft.com/en-us/library/…> 可以添加到各种 VS 工具窗口中。
  • 是的,你有带有 MSTests 的测试类别,尽管它们本身毫无用处。
【解决方案3】:

使用 MSTest(如果其他选项不起作用,一些选项会有所帮助)

您可以拥有 TestCategories(使用 TestCategory 属性),然后使用测试列表编辑器顶部的过滤器来挑选您想要的。

您也可以通过右键单击项目/文件夹来创建有序的测试列表,单击顶部的新测试,这是选项之一。然后,您可以在批处理中添加和排序测试,它将按顺序运行它们,并且当序列中的一个失败时,可以选择使其余的测试失败。

我的测试是按顺序运行的,所以正如其他人提到的,您可能只需将并发设置为 1,但我自己没有这样做。

【讨论】:

    【解决方案4】:

    如果你有 resharper,你应该使用Gallio
    它支持您可能选择的任何框架。
    它将大大提高您的工作效率。

    【讨论】:

    • 1.这是伽利略,不是伽利略。 2. Gallio 只是一个测试运行器,OP 要求具有某些功能的框架。
    • 对不起拼写错误的名字。我会修好它。 OP 正在寻找的功能之一是可以在 VS 中运行测试。对于他选择的任何框架,Gallio 都没有问题。这是相关的。
    【解决方案5】:

    NUnit

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

    【讨论】:

    • 您也可以使用 TestDriven.Net for 4。话虽如此,正如您所说,ReSharper 做得很好,并且还做了很多其他事情,所以它可能是一个更好的方法。
    【解决方案6】:

    使用 MSTest

    对于 1:不同种类(类别)的测试

    如果您拥有 ReSharper,则可以在测试运行中根据 TestCategory 对测试进行分组。 (如果没有 ReSharper,强烈推荐。您可以免费试用 30 天)。

    如果您不使用 [Priority(int)] 属性,您可以在 Visual Studios 测试运行程序中对其进行分组。

    不幸的是,使用优先级,你不能在一个测试中拥有多个标签。

    【讨论】:

      猜你喜欢
      • 2010-12-09
      • 2012-08-13
      • 2011-12-04
      • 2010-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-27
      • 2011-01-04
      相关资源
      最近更新 更多