Есть ли общий способ тестирования сложных функций с помощью NUnit? - PullRequest
3 голосов
/ 23 февраля 2011

Есть ли общий способ тестирования сложных функций с несколькими параметрами с помощью NUnit? Я думаю, что очень трудно или невозможно проверить каждое условие.

Боюсь, что сочетание параметров, которые не ожидаются в функции, также не ожидается в тесте.

Таким образом, ожидаемое состояние не будет ошибочным, но неожиданное.

Спасибо

Ответы [ 5 ]

5 голосов
/ 23 февраля 2011

Это не должно быть трудно проверить вообще.Если это так, метод не предназначен для тестируемости, и это запах кода, который говорит вам, что вам необходимо его реорганизовать.

Я склонен писать тесты в этих случаях следующим образом (другие могут быть лучшепредложения):

  1. Работает ли так, как задумано, когда передаются все соответствующие параметры?
  2. Выдает ли ожидаемые исключения, когда я думаю, что должно?(ArgumentNullException и т. Д.)
  3. Для каждого параметра, что происходит, когда я передаю ноль, минимум и максимум.(Это может быть очень обширно, в зависимости от количества аргументов.)

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

2 голосов
/ 23 февраля 2011

Для тестов на основе данных в NUnit есть атрибут [TestCase] .Модульные тесты обычно не проверяют все возможные сценарии.Они просто тестируют репрезентативный набор входов, которые хорошо охватывают то, что SUT делает на различных входах.Просто выберите некоторые характерные входные данные, и все будет в порядке.

1 голос
/ 23 февраля 2011

Использование RowTest аналогичный вопрос можно найти на

C #, NUnit Assert in Loop

взгляните на ответ @ "Сэм Холдер", я скопировал код с нескольких настроек.

[TestFixture] 
    public class TestExample 
    {      

    [RowTest]      
    [Row( 1)]      
    [Row( 2)]      
    [Row( 3)]      
    [Row( 4)]      

    public void TestMethodExample(int value)      
    {           
              ...
              ...
              ...
              Assert.IsTrue("some condition ..");
    } 
 } 
1 голос
/ 23 февраля 2011

Не знаю, ищите ли вы именно такую ​​вещь, но есть автоматический генератор модульных тестов, созданный исследованием Microsoft под названием PEX .

Pex автоматически создает тестовые наборы с высоким охватом кода.Прямо из редактора кода Visual Studio Pex находит интересные значения ввода-вывода ваших методов, которые вы можете сохранить как небольшой набор тестов с высоким охватом кода.Microsoft Pex - это надстройка для Visual Studio для тестирования приложений .NET Framework.

0 голосов
/ 02 марта 2011

Я согласен с Майком Хофером, что вопрос указывает на запах кода.

Тем не менее, NUnit имеет атрибут Combinatorial , который может помочь вам, если вы не проводите рефакторинг / редизайн.

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