想要更漂亮的单元测试,我已经使用关键字params
将所有参数替换为单个数组。它给了我以下内容。
[DataRow("field1", "field1", "field2", "field2")]
[DataTestMethod]
[ExpectedException(typeof(InvalidJsonDataFieldException))]
public void Parse_ShouldThrow_GivenOrderIsWrong(params string[] fieldReads)
{
//Doesn't reach this point
...
}
因此,string fieldRead1, string fieldRead2, string fieldRead3, string fieldRead4
变成了params string[] fieldReads
,我认为这更加整洁。一切都可以编译,但是在启动测试时,它将返回以下错误,甚至没有到达第一行。
测试方法抛出异常 System.Reflection.TargetParameterCountException,但异常 MyNamespace.MyException是预期的。异常消息: System.Reflection.TargetParameterCountException:参数化 错误。
因此它肯定在处理它时遇到问题。
你们知道使它起作用的聪明方法吗?
我知道这没什么大不了的,但我还是很好奇。
答案 0 :(得分:0)
最简单的方法是编写自己的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)
{
string[] data = base.Data.Select(x => x.ToString()).ToArray();
object[] arguments = new object[] { data };
return new List<object[]> { arguments };
}
}
然后您可以像这样使用它:
[MyDataRow("field1", "field1", "field2", "field2")]
[DataTestMethod]
public void SampleTest(params string[] fieldReads)
{
Assert.AreEqual(4, fieldReads.Length);
}