2016-02-26 86 views
3

是否有可能定義與NUnit的一種方法,這將在裝配前執行每個測試之前執行?NUnit的 - 全球方法每個測試

要非常清楚:我不想以前所有測試執行一次一些代碼,但我需要在每次測試之前做一些常規設置。所以如果我有10個測試,我想讓我的方法執行10次。

繼承是可悲的是不是一種選擇,我(我已經將它用於不同的目的,不能混用)

回答

8

可以定義包含在其之前的方法所需要的代碼的操作屬性。用一個參數將其應用到程序集中,指出它應該用於每個測試。

請注意,動作屬性在NUnit 2和3之間有點不同,所以一定要檢查文檔的適當級別。

+0

真棒!謝謝!!! – synek317

1

SetUpTearDown屬性。

+0

你能解釋一下爲什麼你不能使用繼承?您是否繼承了不同類別的測試裝置而沒有單個父級? –

+0

此外,您還可以使用動態生成的組件?即,構建之後,但在單元測試執行一些代碼,並使用新生成的組件進行單元測試。在這種情況下,您可以繼承您的測試類並將您的設置方法添加到每個使用的反射。但Arturo的答案是最簡單的選擇。 –

3

您可以使用SetupAttribute設置一個方法,該方法將在類別TextFixture中的每個測試之前執行,但僅限於此。

事情是這樣的:

[TestFixture] 
class SomeTests 
{ 
    [SetUp] 
    public void SetupBeforeEachTest() 
    { 
     //Some code 
    } 
} 

我知道你說你不能使用繼承,但是如果你想在大會每次測試之前執行的方法,我覺得這是最好的方法,自SetUp屬性從任何基類繼承。因此,如果一個基類定義了一個SetUp方法,該方法將在派生類每個測試方法之前調用:

abstract class BaseTestFixture 
{ 
    [SetUp] 
    public void SetupBeforeEachTest() 
    { 
     //Some code 
    } 
} 

[TestFixture] 
class SomeTests : BaseTestFixure 
{ 
    //Tests 
} 
+0

是的,我將這種方法用於不同的目的。我在其他程序集中定義了3種不同的通用'TestClass'(0-2類型參數)變體,我希望我的項目可以使用這些TestClass,並以類似的方式添加其他類。 – synek317