如何在 NUnit 3.2 中创建全局初始化?
How to create a Global Initialization in NUnit 3.2?
我正在尝试设计一个测试套件,以便 运行 在我的所有测试之前进行全局初始化。我们可以考虑在不同的 classes 和命名空间中存在测试。在 NUnit 文档中,我只找到了一个名为 OneTimeSetUp 的属性,但它仅适用于同一命名空间中的测试。
所以,我使用继承来设计。我所有的测试 class 都继承了一个基础测试 class ,他的构造函数在其中进行全局初始化(借助静态变量来检查它是否已初始化),并且与全局撕裂相同在析构函数中。
使用它我可以创建我的场景。但是当测试服 运行s 时,基础测试 class 创建新对象,因为在不同的 classes 和命名空间中有测试。它会导致系统过载并且下一个测试 运行s 变慢:第一个测试 运行s 在 50 秒内,而另一个(做同样的事情但在不同的命名空间中)运行s 在 120 秒内。
有更好的方法可以在不影响测试性能的情况下创建全局初始化和全局拆卸
OneTimeSetUp
仅适用于同一命名空间中的测试,您是正确的,但作为
SetUpFixture
documentation 备注:
A SetUpFixture outside of any namespace provides SetUp and TearDown for the entire assembly.
所以 class 看起来像这样:
using System;
using NUnit.Framework;
[SetUpFixture]
public class TestInitializerInNoNamespace
{
[OneTimeSetUp]
public void Setup() { /* ... */ }
[OneTimeTearDown]
public void Teardown() { /* ... */ }
}
我正在尝试设计一个测试套件,以便 运行 在我的所有测试之前进行全局初始化。我们可以考虑在不同的 classes 和命名空间中存在测试。在 NUnit 文档中,我只找到了一个名为 OneTimeSetUp 的属性,但它仅适用于同一命名空间中的测试。
所以,我使用继承来设计。我所有的测试 class 都继承了一个基础测试 class ,他的构造函数在其中进行全局初始化(借助静态变量来检查它是否已初始化),并且与全局撕裂相同在析构函数中。
使用它我可以创建我的场景。但是当测试服 运行s 时,基础测试 class 创建新对象,因为在不同的 classes 和命名空间中有测试。它会导致系统过载并且下一个测试 运行s 变慢:第一个测试 运行s 在 50 秒内,而另一个(做同样的事情但在不同的命名空间中)运行s 在 120 秒内。
有更好的方法可以在不影响测试性能的情况下创建全局初始化和全局拆卸
OneTimeSetUp
仅适用于同一命名空间中的测试,您是正确的,但作为
SetUpFixture
documentation 备注:
A SetUpFixture outside of any namespace provides SetUp and TearDown for the entire assembly.
所以 class 看起来像这样:
using System;
using NUnit.Framework;
[SetUpFixture]
public class TestInitializerInNoNamespace
{
[OneTimeSetUp]
public void Setup() { /* ... */ }
[OneTimeTearDown]
public void Teardown() { /* ... */ }
}