Как написать пример модульного теста, который использует ключевое слово return? - PullRequest
0 голосов
/ 29 декабря 2018

Я работаю над юнит-тестами для моего класса, и у меня есть один сценарий, для которого мне нужно написать юнит-тест.

 public void CheckModelDetail(ProductModel model)
 {
       if (executeTemodel == null)
       {
            return;
       }

       checkModel();
 }

Так что я не уверен, как я могу проверить на returnзаявление.

Ответы [ 2 ]

0 голосов
/ 29 декабря 2018

Одной из возможных аппроксимаций может быть насмешка над классом, вызов CheckModelDetail с null и проверка того, что checkModel никогда не вызывался.Например, используя Moq :

var mock = new Mock<MyClass> { CallBase = true };
mock.CheckModelDetail(null);
mock.Verify(m => m.checkModel(), Times.Never());
0 голосов
/ 29 декабря 2018

Модным словом здесь (с большим количеством литературы) является Observable Effect.Обычно это либо изменение состояния, либо возвращаемое значение, либо исключение, которое выдается (или нет).

Если, например, вы хотите проверить, что не выдается исключение (наблюдаемый эффект)), тогда вам не нужно утверждать ни о каком выводе:

public void ShouldNotThrowException()
{
    var objectUnderTest = new YourClass();
    objectUnderTest.CheckModelDetail(null);
}

Попробуйте удалить ваше предложение if (executeTemodel == null), и вы увидите, что ваш тест не пройден где-то в checkModel (при условии, что вы обращаетесь к членам вашей модели втам).Любое необработанное исключение делает ваш тест неудачным.

Вы можете использовать Должно Should.NotThrow , чтобы сделать это еще более явным:

public void ShouldNotThrowException()
{
    var objectUnderTest = new YourClass();
    Should.NotThrow(() => objectUnderTest.CheckModelDetail(null));
}

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

Если вы хотите утверждать, что checkModel() не вызывается, вы должны переместить этот метод вдругой класс и работа с макетом (см. TestDouble Мартина Фаулера для хорошего обзора).Но я не уверен, волнует ли вас это как потребитель из CheckModelDetail.Вы должны проверить , что вы хотите, чтобы произошло (то есть, не было выброшено исключение, модель принята как действительная, модель считается недействительной, ...), в отличие от , как это достигается (то есть checkModelне вызывается) в общем, так что вы можете рефакторинг реализации, если интерфейс не меняется.

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