NUnit — альтернативы использованию ToString() в TestCaseC#

Место общения программистов C#
Ответить
Anonymous
 NUnit — альтернативы использованию ToString() в TestCase

Сообщение Anonymous »

Когда я создаю тест:

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

[TestCase(123, "http://www.example.com/123")]
public void Foo(int clientId, string expectedUrl)
{
string url = GetUrl(clientId);

Assert.That(url, Is.EqualTo(expectedUrl));
}
Обычно мне нравится извлекать общие элементы во входных данных и ожидаемом результате. Особенно, если я использую одно и то же значение по умолчанию для нескольких тестов. Например, мне нравится делать что-то вроде:

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

private int DefaultClientId = 123;

[TestCase(DefaultClientId , $"http://www.example.com/{DefaultClientId}")]
public void Foo(int clientId, string expectedUrl)
{
string url = GetUrl(clientId);

Assert.That(url, Is.EqualTo(expectedUrl));
}
Однако это невозможно без использования TestCaseSource, что значительно усложняет работу в простых случаях. Решение (еще более уродливое?), которое я нашел, состоит в том, чтобы объявить строковую переменную с «тем же» содержимым:

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

private int DefaultClientId = 123;
private string DefaultClientIdValue = "123";

[TestCase(DefaultClientId , "http://www.example.com/" + DefaultClientIdValue)]
public void Foo(int clientId, string expectedUrl)
{
string url = GetUrl(clientId);

Assert.That(url, Is.EqualTo(expectedUrl));
}
Другой вариант решения этой проблемы — выполнить интерполяцию строк внутри функции:

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

private int DefaultClientId = 123;

[TestCase(DefaultClientId , "http://www.example.com/")]
public void Foo(int clientId, string protoExpectedUrl)
{
var expectedUrl = protoExpectedUrl + DefaultClientId;
string url = GetUrl(clientId);

Assert.That(url, Is.EqualTo(expectedUrl));
}
но если я тестирую несколько разных тестовых случаев, и каждый из них создает разные URL-адреса, это невозможно.
Есть ли какой-нибудь способ справиться с этим "проблема" элегантно?

Подробнее здесь: https://stackoverflow.com/questions/789 ... a-testcase
Ответить

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

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

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

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

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