繁体   English   中英

是否可以在MSTest的DataTestMethod中使用关键字params?

[英]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.

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