当我尝试将Null值传递给nunit ValuesAttribute时,我收到错误。
如果要运行此测试,将执行该类的所有测试方法:
[TestFixture]
public class UrlSectionsTests {
[Test]
public void SetRoot_Throws_ArgumentNullExcpetion(
[Values(null)] TestUrlRootSection rootSection
)
{
Assert.Throws<ArgumentNullException>(() =>
this.urlSections.Root = rootSection);
}
}
有没有办法将NULL值传递给ValuesAttribute?
答案 0 :(得分:1)
我同意CodingYoshi的说法,你没有太多理由在这里使用ValuesAttribute
。但是,您可能已经发现了一个错误,在这种情况下应该报告并修复它!
答案 1 :(得分:1)
如果ValuesAttribute
类型具有签名ValuesAttribute(params object[] x)
的构造函数重载,则该非重展形式的首选将是首选。即,您的裸null
将被视为null
类型的object[]
。为避免这种情况,请使用:
[Values((object)null)]
答案 2 :(得分:1)
您最好使用适当的测试命名约定,例如UnitOfWork_StateUnderTest_ExpectedBehavior()
。在这种特殊情况下,您可以将函数重命名为Root_SetToNull_ThrowsArgumentNullExcpetion()
。查看Roy Osherove的Naming standards for unit tests文章了解更多信息。
如果您尝试使用NUnit Console Runner运行此测试用例,您将看到NUnit Framework抛出异常:
System.NullReferenceException:未将对象引用设置为对象的实例。 at NUnit.Framework.Internal.ParamAttributeTypeConversions.GetData(Object [] data,Type targetType) 在NUnit.Framework.Internal.Builders.ParameterDataSourceProvider.GetDataFor(IParameterInfo参数) 在NUnit.Framework.CombiningStrategyAttribute.BuildFrom(IMethodInfo方法,测试套件) 在NUnit.Framework.Internal.Builders.DefaultTestCaseBuilder.BuildFrom(IMethodInfo方法,测试parentSuite) 在NUnit.Framework.Internal.Builders.NUnitTestFixtureBuilder.AddTestCasesToFixture(TestFixture fixture) at NUnit.Framework.Internal.Builders.NUnitTestFixtureBuilder.BuildFrom(ITypeInfo typeInfo) 在NUnit.Framework.Internal.Builders.DefaultSuiteBuilder.BuildFrom(ITypeInfo typeInfo)
这可能是一个错误。但我认为没有任何理由使用[Values(null)]
,因为您可以安全地将任何始终为null
的测试用例参数转换为局部变量或完全删除。