[英]Is it possible to use keywords params with DataTestMethod of MSTest?
想要使单元测试更漂亮,我已经使用关键字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:Nombredeparamètresinorrerects。
所以它肯定无法处理它。
你认识一个聪明的转折让它发挥作用吗?
我知道这不是什么大问题,但无论如何我很好奇。
最简单的方法是编写自己的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);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.