Ограничение NUnit в TestCaseC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Ограничение NUnit в TestCase

Сообщение Anonymous »

Я хочу протестировать функцию Foo(string input), которая может возвращать ноль или нет. Если введено «A», оно должно вернуть ноль. Если это «B», он должен возвращать не ноль. Я думал о следующем:

Код: Выделить всё

[TestCase("A", Is.Null)]
[TestCase("B", Is.Not.Null)]
public void TestFoo(string input, Constraint expectedContraint)
{
var result = Foo(input);

Assert.That(result, expectedConstraint);
}
Это не удается, поскольку ограничения не являются постоянным выражением, выражением typeof или выражением создания массива типа параметра атрибута. Я мог бы исправить это просто с помощью TestCaseSource, но мне было интересно, есть ли лучший способ сделать это.
Один вариант:

Код: Выделить всё

[TestCase("A", true)]
[TestCase("B", false)]
public void TestFoo(string input, bool shouldBeNull)
{
var expectedConstraint = shouldBeNull ? Is.Null : Is.Not.Null;
var result = Foo(input);

Assert.That(result, expectedConstraint);
}
но в этом случае это добавляет в тест логику, чего мне хотелось бы избежать.
Более того, у меня такое ощущение, что Assert. That(result,expectedConstraint) имеет не самую лучшую читабельность.
Вариант исправления этого может быть

Код: Выделить всё

   if (shouldBeNull) {
Assert.That(result, Is.Null);
} else {
Assert.That(result, Is.Not.Null);
}
но опять же, это добавляет логику тестам.
Способом избежать логики и улучшить читабельность было бы разделить тест на два отдельных теста. Однако в этом случае, если тест довольно сложен в настройке (и именно поэтому я хочу избежать добавления логики), я буду дублировать слишком много кода.
Я думаю, что в этом случае В большинстве случаев любое из этих решений подходит, и особой разницы нет, но я хотел бы знать, есть ли какая-то интересная функция NUnit, которую я упускаю, или есть какая-то хорошая практика, которую я мог бы применить для написания тестов более чисто. Спасибо!

Подробнее здесь: https://stackoverflow.com/questions/789 ... n-testcase
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • NUnit — альтернативы использованию ToString() в TestCase
    Anonymous » » в форуме C#
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous
  • NUnit — альтернативы использованию ToString() в TestCase
    Anonymous » » в форуме C#
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous
  • NUnit — альтернативы использованию ToString() в TestCase
    Anonymous » » в форуме C#
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • NUnit — альтернативы использованию ToString() в TestCase
    Anonymous » » в форуме C#
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • NUnit не может распознать TestCase, если он содержит массив
    Anonymous » » в форуме C#
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»