如何将NULL值传递给测试方法的ValuesAttribute?

问题描述 投票:0回答:3

当我尝试将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?

c# nunit nunit-3.0
3个回答
1
投票

如果ValuesAttribute类型具有带签名ValuesAttribute(params object[] x)的构造函数重载,则该重载将以其非扩展形式首选。即,你的裸null将被视为null类型的object[]。为避免这种情况,请使用:

[Values((object)null)]

1
投票

我同意CodingYoshi的说法,你没有太多理由在这里使用ValuesAttribute。但是,您可能已经发现了一个错误,在这种情况下应该报告并修复它!


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)at NUnit.Framework.Internal.Builders.ParameterDataSourceProvider.GetDataFor(IParameterInfo parameter)at NUnit.Framework.CombiningStrategyAttribute.BuildFrom(IMethodInfo method,Test suite) at NUnit.Framework.Internal.Builders.DefaultTestCaseBuilder.BuildFrom(IMethodInfo方法,测试parentSuite),位于NUnit.Framework.Internal.Builders.NUnitTestFixtureBuilder.BuildFrom(ITypeInfo typeInfo)的NUnit.Framework.Internal.Builders.NUnitTestFixtureBuilder.AddTestCasesToFixture(TestFixture fixture) )在NUnit.Framework.Internal.Builders.DefaultSuiteBuilder.BuildFrom(ITypeInfo typeInfo)

这可能是一个错误。但是我没有看到任何强有力的理由使用[Values(null)],因为你可以安全地将任何始终为null的测试用例参数转换为局部变量或完全删除。

© www.soinside.com 2019 - 2024. All rights reserved.