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 添加一个类别 属性。
这在旧版本 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 添加一个类别 属性。