TestContext 属性在 NUnit3 下抛出 NullReferenceException

TestContext properties throws NullReferenceException under NUnit3

这在旧版本 nunit.framework.dll 中可以正常工作。我最近使用 SpecRun 将我的测试更新为 运行。当代码到达我的 BeforeScenario 方法时:

[BeforeScenario]
    public void Init()
    {
        _sw.Start();
        Initialize();

        var env = ConfigManager.GetEnvironment();

        ArrayList categories = TestContext.CurrentContext.Test
   .Properties["Category"] as ArrayList;            // exception here
        if (env.Contains("csp-dev") || env.Contains("csp-qa") || env.Contains(":8445"))
        {
            if (categories != null && categories.Contains(CategoryToExclude))
            {
                Assert.Inconclusive("You tried to run 'Write' test on {0}. Test has been stopped.", env);
            }

        }

        LoginPage.Goto();
        LoginPage.LoginAs(TestConfig.Username).WithPassword(TestConfig.Password).Login();
    }

它为 TestContext 属性抛出异常。

有人知道在新 nunit.dll 下解决这个问题吗?

编辑: NUnit 版本 3.2.1 锐化器 9 对比:2015 年更新 2

表达式

TestContext.CurrentContext.CurrentTest.Properties["Category"] as ArrayList

除非 NUnit 的底层实现使用 ArrayList,否则它始终为 null - 我可以向您保证它不会!最安全的编码方式是编写...

var categories = TestContext.CurrentContext.CurrentTest.Properties["Category"];

在当前的实现中,这将为您提供一个 IList。

我确实注意到,此界面迫使您了解更多有关 NUnit 内部结构的信息,而您不必了解这些信息。您需要知道 Categories 是作为具有特定名称的 Properties 实现的。这对我们的内部代码来说没问题,但我们可能应该向 CurrentTest 添加一个类别 属性。