簡體   English   中英

NUnit 3.13.3 在 TestFixture 派生類程序集的 SetupFixture 中不運行 OneTimeSetup 和 OneTimeTeardown

[英]NUnit 3.13.3 does not run OneTimeSetup and OneTimeTeardown in SetupFixture of TestFixture derived class assembly

我有一個 TestFixture 類,它派生自位於與 TestFixture 類的程序集不同的程序集中的基類。 基類程序集包含一個位於任何命名空間之外的 SetupFixture 類。 我期望 SetupFixture 的 OneTimeSetup 和 OneTimeTearDown 方法分別在運行開始和運行結束時運行一次,因為派生類繼承自基類。 但是,當我在派生類中執行測試時,沒有運行 SetupFixture OneTimexxx 方法。 為什么這不起作用?

[SetupFixture]
public class SetupFixture   // This is located in AssemblyA
{
    [OneTimeSetUp]
    public void MySetup()
    {
        Console.WriteLine("In Assembly Setup");
    }

    [OneTimeTearDown]
    public void MyTeardown()
    {
        Console.WriteLine("In Assembly Teardown");
    }
}

namespace AssemblyA
{
    [TestFixture]
    public class BaseTestClass    // This is also in AssemblyA
    {
        [Setup]
        public void MySetup()
        {
            Console.WriteLine("In Base Test Setup");
        }
        
        [TearDown]
        public void MyTeardown()
        {
            Console.WriteLine("In Base Test Teardown");
        }
    }
}

namespace AssemblyB
{
    [TestFixture]
    public class MyTestClass : BaseTestClass       // The derived class is in AssemblyB
    {
        [Test]
        public void MyTest()
        {
           Console.WriteLine("In MyTest");
        }
    }
}

NUnit 框架在測試程序集本身中查找 SetUpFixtures。 由於它只檢查測試程序集,它永遠不會查看 AssemblyA,因此永遠不會找到夾具。

這與其他框架功能的工作方式是一致的。 例如,必須在測試程序集中找到 TestFixture,即使它們可能從另一個引用程序集中的基類繼承。 但這僅從基類中提取信息,而不是其他未引用的類,例如您的 SetUpFixture。

您應該在每個測試程序集中定義一個全局 SetUpFixture。 如果您願意,它可以在另一個程序集中引用更廣泛的代碼。

暫無
暫無

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

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