我有两个单元测试,如下所示:
[DataTestMethod]
[DataRow("input1", new object[] { "input2" })]
public void Test1(string input1, object[] input2)
{
}
[DataTestMethod]
[DataRow(new object[] { "input1" }, "input2")]
public void Test2(object[] input1, string input2)
{
}
第一个单元测试Test1
由于System.ArgumentException: Object of type 'System.String' cannot be converted to type 'System.Object[]'.
而无法运行。 Test2
(在切换参数的情况下)运行良好。我认为这可能是因为Test1
正在将input2
感知为一种params
。 由于我没有指定(it seems that params
,所以我不确定情况如何。DataRowAttribute
specifies params
)我可以通过什么方式获得Test1
工作(按顺序排列参数)?
按照乔纳森(Jonathan)的建议,我尝试了以下相同的结果:
[DataTestMethod]
[DataRow("input1", (object)new object[] { (object)"input2" })]
public void Test1(string input1, object[] input2)
{
}
答案 0 :(得分:2)
看看这篇文章:The mysterious ways of the params keyword in C#
请注意,语言规范相对于扩展形式更喜欢普通形式:仅当不使用普通形式时,才考虑扩展形式。
如果您想坚持使用object
类型,似乎您基本上有两个选择:
[DataTestMethod]
[DataRow("input1", new object[] { new object[]{ "input2" } })]
public void Test1(string input1, object[] input2)
{
}
或(将不起作用,请在下面阅读编辑内容)
[DataTestMethod]
[DataRow("input1", "input2")]
public void Test1(string input1, object[] input2)
{
}
编辑:如derekantrican所指出,在DataRowAttribute constructor中指定了params
关键字:
public DataRowAttribute (object data1, params object[] moreData);
这意味着要使用问题中指定的Test1
构造函数,object[]
必须在另一个object[]
内部,如我的第一个示例一样,而第二个示例将不起作用,因为string
与object[]
的签名不匹配。