![](/img/trans.png)
[英]NUnit tests inconclusive after moving parameterized TestFixture to base class. Why?
[英]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.