【问题标题】:Using NUnit for functional tests and guarantees about execution sequence and threads使用 NUnit 进行功能测试并保证执行顺序和线程
【发布时间】:2019-12-09 15:50:25
【问题描述】:

我在 NUnit-Discuss 上问过这个问题,但我意识到这个小组不是很活跃,所以我在这里尝试一下:

到目前为止,我们一直在使用 MSTest 进行一些功能测试。 我知道,MSTest 和 NUnit 都不是真正用于功能测试的,但我们需要在 Visual Studio 中进行简单集成的这些测试。

测试将启动其他可执行文件、连接、执行操作、断开连接和终止进程。

我们在使用 MSTest 时遇到问题,因为它在单独的线程中启动了测试,并且似乎某些执行在测试之间重叠,即使按顺序执行也是如此。

所以我正在考虑迁移到 NUnit。

我的问题是:

可以以任何方式配置 NUnit,例如提供以下保证:

  • 测试将按可以指定的顺序按顺序执行。
  • 测试将从同一个线程执行。
  • 在调用下一个测试的安装代码之前,一个测试的 TearDown 代码将被完全执行。

如果是这样,那将是什么配置(如果有的话)? 谢谢。

【问题讨论】:

    标签: nunit nunit-3.0


    【解决方案1】:

    默认情况下,NUnit 不会并行执行任何测试。如果您从不使用ParallelizableAttribute,那么您的测试一次运行一个。

    当然,这并不意味着您的测试不能破坏 NUnit,例如,通过启动一个在测试线程终止后永远不会终止的线程或进程。 NUnit 只对它自己运行的测试负责。

    NUnit 不保证所有测试都将在同一个线程中执行。当然,这与并行化是分开的。根据您指定的属性,可以为每个线程启动单独的线程。例如,您可以指定一些测试在单线程单元中运行,而其他测试在 MTA 中默认运行。你可以使用RequiresThreadAttribute,它要求 NUnit 使用一个新线程来进行它所装饰的测试。您可以在一个类上使用SingleThreadedAttribute,表示该类中的所有代码都在同一个线程上运行。

    一个技巧,目前可用,但可能不会出现在所有未来的版本中,就是在 nunit3-console 的命令行中指定 --workers=0。这告诉 NUnit 只需运行测试而不创建任何测试工作者,并提供更类似于 NUnit V2 的执行路径。

    因此,总的来说,我认为您的需求可以得到满足,但可能需要对您的测试进行一些修改才能使其按您想要的方式工作。

    【讨论】:

    • 谢谢!还有一个问题:如果在(OneTime)SetUp过程中抛出异常,会调用(OneTime)TearDown吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多