如何防止我的 NUnit 测试有时并行运行
本文关键字:并行 运行 测试 何防止 我的 NUnit | 更新日期: 2023-09-27 17:57:11
我正在使用Monodevelop中包含的NUnit测试运行器。我有 2 个测试必须与静态资源交互,所以我需要它们串行运行而不是并行运行。我试过使用类似的东西
static string Locker="foo";
[Test]
public void Test1()
{
lock(Locker)
{
//....
}
}
[Test]
public void Test2()
{
lock(Locker)
{
//....
}
}
不过,这似乎行不通。还有其他方法吗?
我在真正需要时使用这种方法(我认为这是一个坏主意):
using System.Threading;
private ManualResetEvent FixtureHandle = new ManualResetEvent(true);
[SetUp]
public void SetUp()
{
FixtureHandle.WaitOne();
}
[TearDown]
public void TearDown()
{
FixtureHandle.Set();
}
[Test]
public void Test1()
{
//only test
}
[Test]
public void Test2()
{
//only test
}
不知道 Monodevelop,但 nunit 控制台有命令行参数 /nothread
我认为在 Monodevelopment 中应该是类似的东西
对于串行运行测试,最好使用 Order 属性:
static string Locker="foo";
[Test, Order(1)]
public void Test1()
{
lock(Locker)
{
//....
}
}
[Test, Order(2)]
public void Test2()
{
lock(Locker)
{
//....
}
}
与其直接使用静态资源,不如将其提取到依赖项中,并模拟它(使用 moq 或类似的东西)。
这将允许您编写实际的单元测试来隔离您尝试测试的特定代码段,而无需担心外部上下文。
你错过了单元测试的重点。单元测试必须在各个方面都是独立的。
这意味着执行顺序不得影响单元测试结果。