簡體   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