如何从外部 运行 OneTimeSetUp 和 OneTimeTearDown class
How to run OneTimeSetUp and OneTimeTearDown from external class
你好,我有几个测试 classes,我在这些测试上使用与 OneTimeSetUp
和 OneTimeTearDown
相同的资源,即 IEmbeddable
.
假设我有 N
测试classes,我想在其中重用 OneTimeSetUp
、OneTimeSetDown
和资源(接口 IEmbeddedable
) 。我如何创建一个静态的 class EmbeddableController
可以被所有测试 class 重复使用?
基本上我想:
-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)
可嵌入
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();
}
}
我如何在所有测试class中注入最后一个class?它可以是静态的也可以不是,无论哪种方式它都只是一个实例。
OneTimeSetUp
可以 运行 不同级别。在 TestFixture
上,它 运行s 一次用于夹具。在 SetUpFixture 上,它 运行s 一次用于命名空间。这为您提供了多种选择...
让您的所有灯具都继承自 EmbeddedController
。但是,OneTimeSetUp
将对每个灯具进行一次 运行。虽然可以进行测试并且只初始化服务器一次,但您无法知道 last 测试何时有 运行 以便您可以处理它。我的结论是这对你的情况不起作用,尽管它适用于任何没有资源因此不需要处理的东西。
将所有需要 EmbeddedController
的灯具放入同一个命名空间,没有任何其他 类。将 EmbeddedController
放入同一个命名空间并使其成为 SetUpFixture
。 OneTimeSetUp
将 运行 一次,在任何灯具之前, OneTimeTearDown
将 运行 一次,在所有灯具完成后。为了让灯具访问服务器,您应该使 Server
成为 EmbeddedController
的静态 属性。
你好,我有几个测试 classes,我在这些测试上使用与 OneTimeSetUp
和 OneTimeTearDown
相同的资源,即 IEmbeddable
.
假设我有 N
测试classes,我想在其中重用 OneTimeSetUp
、OneTimeSetDown
和资源(接口 IEmbeddedable
) 。我如何创建一个静态的 class EmbeddableController
可以被所有测试 class 重复使用?
基本上我想:
-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)
可嵌入
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();
}
}
我如何在所有测试class中注入最后一个class?它可以是静态的也可以不是,无论哪种方式它都只是一个实例。
OneTimeSetUp
可以 运行 不同级别。在 TestFixture
上,它 运行s 一次用于夹具。在 SetUpFixture 上,它 运行s 一次用于命名空间。这为您提供了多种选择...
让您的所有灯具都继承自
EmbeddedController
。但是,OneTimeSetUp
将对每个灯具进行一次 运行。虽然可以进行测试并且只初始化服务器一次,但您无法知道 last 测试何时有 运行 以便您可以处理它。我的结论是这对你的情况不起作用,尽管它适用于任何没有资源因此不需要处理的东西。将所有需要
EmbeddedController
的灯具放入同一个命名空间,没有任何其他 类。将EmbeddedController
放入同一个命名空间并使其成为SetUpFixture
。OneTimeSetUp
将 运行 一次,在任何灯具之前,OneTimeTearDown
将 运行 一次,在所有灯具完成后。为了让灯具访问服务器,您应该使Server
成为EmbeddedController
的静态 属性。