为了账号安全,请及时绑定邮箱和手机立即绑定

MSTest - DataTestMethod 中参数的默认值

MSTest - DataTestMethod 中参数的默认值

C#
慕的地10843 2021-11-14 15:59:20
我正在尝试对 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 中说明它?
查看完整描述

1 回答

?
眼眸繁星

TA贡献1873条经验 获得超9个赞

最简单的方法是编写自己的 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);

}


查看完整回答
反对 回复 2021-11-14
  • 1 回答
  • 0 关注
  • 123 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信