繁体   English   中英

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

[英]How can I prevent my NUnit tests from running in parallel sometimes

我正在使用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

我认为这应该与Monodevelop类似

与其直接使用静态资源,不如将其提取到依赖项中并对其进行模拟(使用moq或类似方法)。

这样一来,您就可以编写实际的单元测试,从而隔离要尝试测试的特定代码段,而不必担心外部上下文。

为了连续运行测试,最好使用Order属性:

static string Locker="foo";
[Test, Order(1)]
public void Test1()
{
  lock(Locker)
  {
    //....
  }
}
[Test, Order(2)]
public void Test2()
{
  lock(Locker)
  {
    //....
  }
}

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM