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。如果你看一下这个答案,关于检查方法中的默认参数:,那么你可以这样写:
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);
}
我正在尝试为 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。如果你看一下这个答案,关于检查方法中的默认参数:,那么你可以这样写:
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);
}