使用 NUnit 进行功能测试并保证执行顺序和线程

Using NUnit for functional tests and guarantees about execution sequence and threads

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

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

中进行简单集成的测试

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

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

所以我正在考虑转向 NUnit。

我的问题是:

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

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

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

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

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

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

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