如何防止我的 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)
  {
    //....
  }
}

不过,这似乎行不通。还有其他方法吗?

如何防止我的 NUnit 测试有时并行运行

我在真正需要时使用这种方法(我认为这是一个坏主意):

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 或类似的东西)。

这将允许您编写实际的单元测试来隔离您尝试测试的特定代码段,而无需担心外部上下文。

你错过了单元测试的重点。单元测试必须在各个方面都是独立的。

这意味着执行顺序不得影响单元测试结果。