Передача одного значения аргументу params в NUnit TestCase - PullRequest
9 голосов
/ 04 марта 2012

У меня есть следующий тест:

[ExpectedException(typeof(ParametersParseException))]
[TestCase("param1")]
[TestCase("param1", "param2")]
[TestCase("param1", "param2", "param3", "optParam4", "optParam5", "some extra parameter")]
public void Parse_InvalidParametersNumber_ThrowsException(params string[] args)
{
    new ParametersParser(args).Parse();
}

Первый TestCase (очевидно) терпит неудачу со следующей ошибкой:

System.ArgumentException : Object of type 'System.String' 
cannot be converted to type 'System.String[]'.

Я попытался заменить определение TestCase этим:

[TestCase(new[] { param1 })]

но теперь я получаю следующую ошибку компиляции:

ошибка CS0182: аргумент атрибута должен быть выражением константы, выражением typeof или выражением создания массива типа параметра атрибута

Мое решение на данный момент - перенести случай «одного параметра» в другой метод тестирования.

Тем не менее, есть ли способ заставить этот тест работать так же, какдругие?

Ответы [ 2 ]

8 голосов
/ 04 марта 2012

Одним из способов может быть использование TestCaseSource и использование метода, который возвращает каждый набор параметров вместо использования TestCase.

3 голосов
/ 28 мая 2014

На основании этого ответа в ответ на вопрос ' NUnit не может распознать TestCase, когда он содержит массив ', ошибка компиляции происходит из ошибки и может быть преодолен с помощью синтаксиса для именованных тестовых случаев, например:

[ExpectedException(typeof(ParametersParseException))]
[TestCase(new[] { "param1"}, TestName="SingleParam")]
[TestCase(new[] { "param1", "param2"}, TestName="TwoParams")]
[TestCase(new[] { "param1", "param2", "param3", "optParam4", "optParam5"}, "some extra parameter", TestName="SeveralParams")]
public void Parse_InvalidParametersNumber_ThrowsException(params string[] args)
{
    new ParametersParser(args).Parse();
}
...