Модульный тест не будет работать с массивом в качестве последнего параметра - PullRequest
0 голосов
/ 21 января 2019

У меня есть два модульных теста следующим образом:

[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 Ответ

0 голосов
/ 21 января 2019

Взгляните на этот пост: Таинственные способы использования ключевого слова params в 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 , указано ключевое слово paramsв конструкторе DataRowAttribute :

public DataRowAttribute (object data1, params object[] moreData);

Это означает, что для использования конструктора Test1, как указано в вопросе, object[] должен быть внутри другого object[], как в моемпервый пример, тогда как второй пример не будет работать, так как string не будет совпадать с подписью object[].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...