簡體   English   中英

如何從外部類運行OneTimeSetUp和OneTimeTearDown

[英]How to run OneTimeSetUp and OneTimeTearDown from external class

您好,我有幾個測試類,在這些類上我使用的是與OneTimeSetUpOneTimeTearDown相同的資源,該資源是IEmbeddable

可以說我有N testclasses,在這我想重用OneTimeSetUpOneTimeSetDown和資源(接口IEmbeddedable )。如何我可以創建一個靜態類EmbeddableController可以被所有testclasses被重用?

基本上我想:

-Start static Resource of type `IEmbeddedable` once
-Run TestClass 1 on resource ( set it up +tear it down)
-Run TestClass 2 on resource (set it up + tear it down)
......
-Run TestClass N on resource (set it up +tear it down)

IEmbeddedable

interface IEmbeddedable:IDisposable {
        int ExposedPort { get; }
    }

Test_ClassX

class Test_ClassX {
            private IEmbeddedable server;
            [OneTimeSetUp]
            public  void Launch() {
                server = RedisServer.Launch();
            }
            [OneTimeTearDown]
            public void Stop() {
                this.server.Dispose();
            }

            [TestCase()]
            public async Task CanRunEmbeddedServer() {

                using (server) {
                    var multi = new Multiplexer();
                    using (var link = multi.OpenLink(Address.Create(Port:server.ExposedPort))) {
                        string rez=await link.FlushAllAsync();
                        Assert.AreEqual(rez, "OK");
                    }


                }
            }
}

原型

 static class EmbeddedController {
        private static  IEmbeddedable server;
        [OneTimeSetUp]
        public static void Run() {
            server = RedisServer.Launch();
        }
        public static void Stop() {
            server.Dispose();
        }
    }

我該如何在所有測試類中注入最后一個類?它可以是靜態的,也可以不是靜態的,無論哪種方式都只是一個實例。

OneTimeSetUp可以在各種級別上運行。 TestFixture ,它為燈具運行一次。 在SetUpFixture上,它為名稱空間運行一次。 這給您幾個選擇...

  1. 讓所有燈具都繼承自EmbeddedController 但是, OneTimeSetUp隨后將為每個燈具運行一次。 盡管可以進行測試並且只初始化服務器一次,但是您將無法知道上一次測試的運行時間,因此您無法處置它。 我的結論是,這對您的情況不起作用,盡管對沒有資源且不需要處理的任何事物都有效。

  2. 將所有需要EmbeddedController的裝置放到相同的名稱空間中,而無需任何其他類。 EmbeddedController放入相同的名稱空間,並將其設置為SetUpFixture OneTimeSetUp將運行一次,之前的任何固定裝置和OneTimeTearDown所有的燈具都完成后,將運行一次。 為了使燈具能夠訪問服務器,您應該使Server成為EmbeddedController的靜態屬性。

暫無
暫無

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

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