我有两个单元测试如下:
[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
。由于我没有指定params
,我不确定这是怎么回事。(似乎DataRowAttribute
指定了params
)我可以让Test1
工作的方法是什么(按照这个顺序的参数)?
正如乔纳森所建议的,我尝试了以下方法,得到了相同的结果:
[DataTestMethod]
[DataRow("input1", (object)new object[] { (object)"input2" })]
public void Test1(string input1, object[] input2)
{
}
1条答案
按热度按时间uhry853o1#
看看这篇文章:The mysterious ways of the params keyword in C#
请注意,语言规范更喜欢范式而不是扩展形式:它只在范式不适用的情况下考虑展开形式。
如果你想坚持使用
object
类型,你基本上有两个选择:或 (不起作用,阅读下面的编辑)
Edit:正如derekantrican所指出的,
params
关键字在DataRowAttribute构造函数中指定:这意味着要使用问题中指定的
Test1
构造函数,object[]
必须位于另一个object[]
中,就像我的第一个例子一样,而第二个例子将不起作用,因为string
将不匹配object[]
的签名。