簡體   English   中英

在並行NUnit中運行夾具,但不運行方法

[英]Running Fixtures but not methods in parallel NUnit

我有一個關於使用NUnit 3.8.0.0,.NET 4.0和C#使用參數化夾具和方法進行測試並行化的問題。

我目前正在開發一個測試套件,該套件使用一組資源中的每個資源運行測試。 由於初始化這些資源非常耗時,並且這些資源不會保留狀態,因此我想在測試用例之間共享它們,以提高性能。 這些資源不能由多個測試同時使用。

為了做到這一點,我用一個帶有一個參數的構造函數制作了一個基礎夾具,它使夾具指向正確的資源。 實際的測試夾具是該夾具的子類。

我有一個同時使用構造函數參數(傳遞給基類)和測試用例參數的測試裝置。 基於該參數,基類將初始化一些資源。 這些資源不能同時使用。

現在,我嘗試以一種方式並行化這些測試用例,以使類MyParameterizedTestFixture(V1)MyParameterizedTestFixture(V2)生成的不同夾具中的測試。 可以同時運行,但是不能在同一個夾具中進行測試(因為不能同時使用資源)。 此外,不同的燈具類別可能不會並行運行。

我的代碼看起來像這樣(細節被抽象掉了):

[TestFixture]
[TestFixtureSource(typeof(TestData), "FixtureParams")]
public class MyParameterizedTestFixture : BaseFixture
{
     public MyParameterizedTestFixture(Resource resource) : base (resource) { }

     [Test]
     public void Test1() { /* run test using Resource */ }

     [TestCaseSource("Params")]
     public void TestParameterized(object param) { /* run test using Resource and param */ }
}

我試圖將Parallelizable(ParallelScope.Self)]添加到派生的夾具中,但是這導致使用相同資源(即具有相同version )的夾具參數同時測試來自不同夾具的測試(僅選擇一個夾具時有效) 。

使用[Parallelizable(ParallelScope.Fixture)]絕對不正確,因為它將導致不同的燈具一起運行。 使用[Parallelizable(ParallelScope.Children)]也是不正確的,因為它將導致夾具中的不同測試用例一起運行,而不是同一類中的不同夾具。

現在,我想知道是否可以使用“分層”方法(標記夾具以某種方式可並行化,方法以另一種方式標記)來歸檔所需的東西,或者是否可以定義自定義並行作用域?

NUnit允許您並行運行任何燈具。 當夾具並行運行時,它可以與任何其他並行夾具同時運行。 可以將燈具組合在一起但不能與其他燈具一起運行的某種方式將是一個不錯的功能,但這不是我們現在擁有的一種

當您具有同一燈具的多個實例(即通用或參數化燈具)時,NUnit對待這些實例的方式與對待任何燈具的方式完全相同。 也就是說,如果燈具是可並行化的,則實例可以與其他任何實例以及不同燈具的實例同時運行。

同樣,您可以並行運行測試用例(方法),也可以不並行運行。 如果並行案例包含在非並行燈具中,則它只能與該燈具的其他方法並行運行。 如果它包含在並行夾具中,則它可以與任何其他並行方法同時運行。

換句話說,利用我們目前具有的功能,對於每個測試,無論是套件,夾具還是測試用例,並行性基本上是全部或什么都不是。 隨着將來版本的增強,這可能會更改。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM