Один для гуру NUnit: обновление до версии 2.x и использование новых функций с помощью существующих средств тестирования - PullRequest
0 голосов
/ 22 июля 2010

Я недавно обновился до NUnit 2.5 (да, я знаю), и мне было интересно, смогу ли я выбрать чей-то мозг с этим.

У меня есть много тестов, которые выглядят так:

[Test]
public void TestTheSpecialDict() {

    int start = 0;
    int end = 44;

    Dictionary<int, string> = SomeFunction(start, end);
    Assert.That(dict1.Count > 0);

    // Alright now, some funky values
    start = -1;
    end = -34;
    Dictionary<int, string> dict2 = SomeFunction(start, end);

    Assert.That(dict2.Count == 0);

}

Таким образом, этот специальный тест гарантирует, что SomeFunction возвращает пустой словарь, когда диапазон недопустим, например, вместо нуля.

Теперь я обнаружил атрибут [TestCase(...)] в 2.x,О, МОЙ БОГ!Поэтому я хочу, чтобы мой тест выглядел так:

[TestCase(0, 44)]
[TestCase(-1, -34)]
public void TestTheSpecialDict(int start, int end) {
    /* ... */
}

Отлично.Проблема здесь, конечно, заключается в том, что второй Assert не проходит в первом тестовом примере, а первый Assert не выполняется во втором.Очевидно, это ожидаемое поведение, поскольку start и end имеют область действия метода и применяются к обеим операциям.Не удивительно.

Исправить это не проблема:

  • Разбейте контрольные примеры на два разных метода.Дублирование кода и, на самом деле, TestCase было бы отчасти излишним.
  • Добавить дополнительный параметр тестового примера (например, последовательное значение) и обусловить вызовы Assert на его основе.Много работы, учитывая количество тестов, которые у меня есть.
  • Что-то еще, чего у меня нет.

Есть ли "более чистый" способ?Я просмотрел NUnit.Framework и не вижу ничего, что позволило бы мне сделать это бегло Полагаю.Поэтому мне интересно, есть ли кто-нибудь, кто имел этот тип "устаревшей" структуры UT с NUnit 1.x и как они мигрировали, используя преимущества новых функций.

Ответы [ 2 ]

1 голос
/ 22 июля 2010

Мне лично кажется, что эти атрибуты TestCase полезны для тестирования функций, которые принимают некоторые параметры и возвращают некоторое значение. Таким образом, в атрибутах вы можете просто дать ему аргументы и ожидаемое значение, и это работает нормально. В вашем случае вы можете указать точное значение словаря или логическое значение, если оно положительное. Я не уверен, если это увеличит читабельность в вашем случае, хотя ....

1 голос
/ 22 июля 2010

Прости меня за то, что у меня нет Visual Studio для проверки этого. но, возможно, используя Assert.That и передавая параметр оценки. Примерно так:

[TestCase(0, 44, Is.GreaterThan(0))]
[TestCase(-1, -34, Is.Empty]
public void TestTheSpecialDict(int start, int end, Func<Dictionary<int, string>, bool> condition) {
    /* ... */

    Assert.That(dict.Count, condition);

}

Опять извиняюсь за то, что он не точный, особенно тот факт, что тип параметра может быть лишь догадкой, но основная идея должна быть верной.

...