TestContext属性在NUnit3下抛出NullReferenceException

时间:2016-06-03 10:35:04

标签: c# selenium-webdriver nunit specflow

这曾经用于旧版本的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 VS:2015年更新2

1 个答案:

答案 0 :(得分:1)

表达式

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

除非NUnit的底层实现使用ArrayList,否则总是为null - 我可以保证不会!编写此代码最安全的方法是编写...

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

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

我注意到这个界面会让你更多地了解NUnit内部结构。您需要知道类别是作为具有特定名称的属性实现的。我们的内部代码没问题,但我们应该在CurrentTest中添加Categories属性。