【问题标题】:nunit : global variable initialisation in setupfixturenunit : setupfixture 中的全局变量初始化
【发布时间】:2020-04-03 14:28:38
【问题描述】:

我对 C# 和 nunit 非常陌生。如果这是基本的并且已经在这里被问到,请多多包涵。

我们有一个全局设置,由 [SetupFixture] 类定义,预计只运行一次。私有变量在它的 [setup] 中定义。我们希望在我们所有的测试装置中使用相同的变量,因此在我们所有的测试装置中继承测试库类。 但是,在执行 Testcase1 时,我观察到 globalSetup() 被多次调用。谁能指出我的问题?示例代码如下。

namespace CTB
    {
         [SetupFixture] 
         public class Testbase
         {
            private byte val1;
            private byte val2;  


        [setup]
        public void globalSetup
        {
           val1 = 5;
           val2 = 10;
        }

        [Teardown]
        public void globalTeardown
        {
            //
        }
      }
}


namespace CTB.Testcase
{

    public class TestCase : Testbase
    {
        [Setup]
        public void Setup()
        {

        }

        [Teardown]
        public void Teardown()
        {

        }

        [Test]
        public void Testcase1()
        {
            byte val3 = val1 + val2; // Expect 15
        }
    }
}

【问题讨论】:

  • 这看起来像是旧版本的 NUnit,因为 [SetUp] 不再在 SetUpFixtures 中使用。你能具体说明你使用的是什么版本吗?

标签: nunit global


【解决方案1】:

我假设我的评论的答案是“否”,并且您使用的是当前版本的 NUnit 3。如果我错了,请纠正我。 :-)

您已经让TestBase 类提供两个功能:

  1. 它是TestFixture 的基类,因此它本身就是TestFixture

  2. 它被标记为 SetUpFixture,因此它也提供该功能 - 顺便说一下,这是一个完全不同的功能。

需要明确的是,您永远不应该这样做。这是一种几乎似乎旨在混淆 NUnit 的“技巧”——当然不是你的意图。您的测试装置不应与任何SetUpFixture 有继承关系。为测试夹具基础和设置夹具使用不同的类。

除此之外,这里是正在发生的事情的更长故事......

  1. 在您的测试甚至执行之前,SetUpFixture 首先“运行” - 用引号括起来,因为它实际上什么都不做。这是因为它不包含任何标有 [OneTimeSetUp] 或 '[OneTimeTearDown]` 的方法。

注意:作为替代解释,如果您使用的是相当旧的 NUnit 版本,此时实际上会调用 [SetUp][TearDown] 方法。当在 SetUpFixture 和 TestFixture 中遇到时,Nnit V2 使用了具有不同含义的那些属性。

  1. 接下来执行您的测试。在每次测试之前,都会运行继承的 [SetUp][TearDown] 方法。当然,这些实际上与步骤 1 中的方法相同。NUnit 已被欺骗这样做!

这里有一些对未来的一般指导......

  1. 如果您希望多个灯具使用相同的数据,基类很有用。任何公共或受保护的字段或属性都将由继承的设备共享。

  2. 如果您想对一组不相关测试装置进行一些通用设置或拆卸,请使用SetUpFixture。请注意,将数据从SetUpFixture 传递到测试装置的唯一方法是通过静态字段或属性。通常,您使用SetUpFixture 设置运行测试的环境,而不是提供数据。

  3. 切勿将同一个类用于两种用途。

【讨论】:

  • 非常感谢您的回复。我忘了提到我正在使用 nunit 2.6
猜你喜欢
  • 2011-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-03
相关资源
最近更新 更多