[英]NUnit 3.13.3 does not run OneTimeSetup and OneTimeTeardown in SetupFixture of TestFixture derived class assembly
[英]How to run OneTimeSetUp and OneTimeTearDown from external class
您好,我有幾個測試類,在這些類上我使用的是與OneTimeSetUp
和OneTimeTearDown
相同的資源,該資源是IEmbeddable
。
可以說我有N
testclasses,在這我想重用OneTimeSetUp
, OneTimeSetDown
和資源(接口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上,它為名稱空間運行一次。 這給您幾個選擇...
讓所有燈具都繼承自EmbeddedController
。 但是, OneTimeSetUp
隨后將為每個燈具運行一次。 盡管可以進行測試並且只初始化服務器一次,但是您將無法知道上一次測試的運行時間,因此您無法處置它。 我的結論是,這對您的情況不起作用,盡管對沒有資源且不需要處理的任何事物都有效。
將所有需要EmbeddedController
的裝置放到相同的名稱空間中,而無需任何其他類。 將EmbeddedController
放入相同的名稱空間,並將其設置為SetUpFixture
。 該OneTimeSetUp
將運行一次,之前的任何固定裝置和OneTimeTearDown
所有的燈具都完成后,將運行一次。 為了使燈具能夠訪問服務器,您應該使Server
成為EmbeddedController
的靜態屬性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.