簡體   English   中英

NUnit:基類中的 [SetUp] 和 Dervied [TestFixture] 中的 [OneTimeSetup]

[英]NUnit: [SetUp] in base class and [OneTimeSetup] in Dervied [TestFixture]

我正在查看一些使用 NUnit 的測試代碼,它繼承自包含 [SetUp] 屬性的基類:

public class BaseClass
{
   [SetUp]
   public void SetUp()
   {
     //do something
   }

}

[TestFixture]
public class DerivedClass : BaseClass
{
  [OneTimeSetUp]
  public void OneTimeSetUp()
  {

   //do something here only once for the tests in this fixture but after BaseClass [Setup] method execution. 
  }
   //tests run down here.
   //[Test]
   //[Test]
   //etc
}

[OneTimeSetup] 方法在基類 [Setup] 方法之前調用。 是否有可能在 Base Class[Setup] 方法之后調用 if。 我將首先執行基類 [Setup] 方法,然后為派生的 [TestFixture] 類中的所有測試只調用一次 [OneTimeSetup] 方法。 [Setup] 方法在 [TestFixture] 類中的每個測試之前執行一次。 謝謝。

當您使用繼承時,這意味着派生類和基類之間的關系is a ,即派生類的實例基類。 出於實際目的,它們都是一回事。 如果您不想發生這種情況,請不要使用繼承。

在這種情況下,您正在 DerivedClass 上運行測試。 它從類本身獲取一些方法並繼承其他方法。 通過使用繼承,您可以控制標有相同屬性的方法的執行順序。 例如,基類中的 SetUp 方法將在派生類中的 SetUp 方法之前運行。

但是,由每個不同屬性標記的方法在它們應該運行的時間運行。 OneTimeSetUp 在類中執行測試之前運行一次。 設置在每個單獨的測試之前運行。

它並不完全清楚你正試圖在這里完成的,但如果你想要做的東西一旦第一設置被稱為后,那么你可以在派生類中使用安裝方法與靜態標志使用,以使其只執行一次.

也就是說,如果你解釋你想要完成的事情,那么可能會有一種更簡潔的方法來做到這一點。

暫無
暫無

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

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