繁体   English   中英

MSTest-DataTestMethod中参数的默认值

[英]MSTest - Default value for a parameter within a DataTestMethod

我正在尝试为DataTestMethod中的参数使用默认值。 我有以下代码:

[DataTestMethod]            
[DataRow("sampleString", true)]
[DataRow("sampleString2")]            
public async Task SampleTest(string parameterA, bool parameterB = false)
{
    var condition = await AsyncOperation();

    Assert.AreEqual(parameterB, condition);
}

但是,我得到: System.Reflection.TargetParameterCountException: Parameter count mismatch.

有没有办法为方法参数定义默认值并跳过在DataRow中声明它的方法?

最简单的方法是编写自己的DataRowAttribute。 如果查看此答案,有关检查方法中的默认参数: https : //stackoverflow.com/a/20759946/7225096 ,那么您可以编写如下内容:

public class MyDataRowAttribute : DataRowAttribute, ITestDataSource
{
    public MyDataRowAttribute(object data1) : base(data1)
    { }

    public MyDataRowAttribute(object data1, params object[] moreData) : base(data1, moreData)
    { }

    public new IEnumerable<object[]> GetData(MethodInfo methodInfo)
    {
        var parameters = methodInfo.GetParameters();
        object[] args = new object[parameters.Length];

        for (int i = 0; i < args.Length; i++)
        {
            if (i < base.Data.Length)
            {
                args[i] = base.Data[i];
            }
            else if (parameters[i].HasDefaultValue)
            {
                args[i] = parameters[i].DefaultValue;
            }
            else
            {
                throw new ArgumentException("Not enough arguments provided");
            }
        }

        return new List<object[]> { args };
    }
}

并像这样使用它:

[DataTestMethod]
[MyDataRow("sampleString", true)]
[MyDataRow("sampleString2")]
public async Task SampleTest(string parameterA, bool parameterB = false)
{
    var condition = await AsyncOperation();

    Assert.AreEqual(parameterB, condition);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM