【问题标题】:How to create a Global Initialization in NUnit 3.2?如何在 NUnit 3.2 中创建全局初始化?
【发布时间】:2016-03-22 15:01:49
【问题描述】:

我正在尝试设计一个测试套件,以便在我的所有测试之前运行全局初始化。我们可以考虑在不同的类和命名空间中存在测试。在 NUnit 文档中,我只找到了一个名为 OneTimeSetUp 的属性,但它仅适用于同一命名空间中的测试。

所以,我设计了使用继承。我所有的测试类都继承了一个基础测试类,他的构造函数在其中进行全局初始化(借助静态变量来检查它是否已初始化),并且与析构函数中的全局拆除相同。

使用它我可以创建我的场景。但是当测试套件运行时,基测试类会创建新对象,因为在不同的类和命名空间中有测试。它会导致系统过载,并且下一个测试运行缓慢:第一个测试在 50 秒内运行,而另一个(执行相同操作但在不同命名空间中)在 120 秒内运行。

有更好的方法来创建全局初始化和全局拆卸而不影响测试性能

【问题讨论】:

    标签: c# testing selenium-webdriver nunit


    【解决方案1】:

    你是对的,OneTimeSetUp 仅适用于同一命名空间中的测试,但作为 SetUpFixture documentation注:

    SetUpFixture 任何命名空间之外为整个程序集提供 SetUp 和 TearDown。

    所以这个类应该是这样的:

    using System;
    using NUnit.Framework;
    
    [SetUpFixture]
    public class TestInitializerInNoNamespace 
    {
        [OneTimeSetUp]
        public void Setup() { /* ... */ }
    
        [OneTimeTearDown]
        public void Teardown() { /* ... */ }
    }
    

    【讨论】:

    • 所以在这种情况下,我应该使用SetUpFixture 而不是TestFixture,正如您在代码示例中所写的那样,对吗?
    • 我会尝试这两种情况,如果其中一些可行,我会考虑你的遮阳篷。谢谢!
    • 糟糕,抱歉,应该是 SetUpFixture。已编辑。
    • 当我尝试将类结构更改为 awnser 示例时收到一条错误消息:Message: OneTimeSetUp: SetUpAttribute not allowed in a SetUpFixture
    • 好的,我修复了错误。其他类的方法 [SetUp] 和 [TearDown] 是必要的(我使用它们在日志中写入测试成功/失败)。另外,我从我的测试类中删除了 [SetUpFixture] 类的所有继承,并且它起作用了。谢谢!!
    猜你喜欢
    • 2011-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-08
    • 2017-06-17
    • 2011-07-20
    相关资源
    最近更新 更多