我正在尝试充分利用 TestContainers 和 NUnit 来运行我的 .NET 测试。 我有两个测试用例,一旦开始,就会获取一个创建的 MongoDb 容器,连接到它,完成它们的工作,然后处理给定的容器。
如下图所示,当前执行时间约为 9 秒,两个测试分别耗时约 5 秒和约 4 秒。
每个测试都继承自基类,该基类具有负责容器生命周期的
OneTimeSetUp
和 OneTimeTearDown
实现:
[OneTimeSetUp]
public async Task OneTimeSetup()
{
_testContainer = new MongoDbBuilder().Build();
await _testContainer.StartAsync();
_client = new MongoClient(_testContainer.GetConnectionString());
Database = _client.GetDatabase("test");
}
[OneTimeTearDown]
public async Task OneTimeTeardown() => await _testContainer.DisposeAsync();
如您所见,对于每个测试,都会运行相同的
setup
和 teardown
,从而导致在每个测试中创建和销毁容器。
我想要实现的是:
Global Setup <==== spin the container here
Test1 Setup <---- uses the newly created container
Test1 Run
Test1 Teardown
Test2 Setup <---- uses the same container
Test2 Run
Test2 Teardown
Global Teardown <==== destroys the container here
有没有办法可以使用 NUnit 实现这一目标? 谢谢大家!
因为您在基类中进行了拆卸和设置,所以它将在每次设置和拆卸之前运行,就像您所看到的一样......
https://docs.nunit.org/articles/nunit/writing-tests/attributes/onetimesetup.html
继承 OneTimeSetUp 属性是从任何基类继承的。因此,如果基类定义了 OneTimeSetUp 方法,则该方法将在派生类中的任何方法之前调用。 您可以在基类中定义一个 OneTimeSetUp 方法,在派生类中定义另一个方法。 NUnit 将在派生类中的方法之前调用基类 OneTimeSetUp 方法。
您可以有一个一次性设置的拆卸方法来调用基类,但该属性是在继承的类上分配的。