Вопрос о модульном тестировании - PullRequest
3 голосов
/ 05 июля 2011

Я бы хотел провести юнит-тестирование этого метода

public string Edit(int id)
{
   var item = _repository.Get(id);

   string json = _jsonConverotr.Convert(item);

   return json;
}

Репозиторий будет по-издеватьсяНо jsonConvertor - это простой класс для преобразования сущности в json.

Так что мой вопрос, должен ли я также издеваться над классом jsonConvertor, или можно использовать оригинал?Класс jsonConvertor тестируется в другом месте.

Ответы [ 4 ]

4 голосов
/ 05 июля 2011

Если у вас есть тест для вас jsonConverter, то вы должны посмеяться над ним. Только протестируйте метод Edit и проверьте, соответствуют ли вызовы и результаты ожидаемым.

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

2 голосов
/ 06 июля 2011

Здесь полезно подумать об этом: какое поведение вы пытаетесь проверить? Поведение, к которому вы стремитесь, это то, что ему присвоен правильный идентификатор, возвращайте объект JSON. Я бы порекомендовал один из двух следующих подходов, оба из которых не высмеивают преобразование JSON:

  1. Направьте JSON как ожидаемый результат и подтвердите, что он равен возвращаемому значению. Тот факт, что вы используете JsonConverter, является деталью реализации. Ваш тест не должен заботиться о том, как он получает JSON. Следует просто позаботиться о том, чтобы он получал действительный JSON.
  2. Создайте класс с именем JSONResult, который имеет свойство Object и метод ToJSON (). Тогда ваш метод мог бы вернуть JSONResult, и вы могли бы утверждать, что его свойство Object равно объекту, который вы вернули из своего ложного репозитория. Тогда вы можете иметь отдельные тесты, чтобы убедиться, что ToJSON работает правильно. (Кроме того, этот метод поразительно похож на метод ASP.NET MVC на контроллере, что означает, что вы должны использовать встроенный JSONResult, производный от ActionResult)

Подумав об этом, я бы порекомендовал # 2. Это чище для тестирования и более подробное описание того, что происходит.

2 голосов
/ 05 июля 2011

Я не вижу смысла в модульном тесте для этого метода Edit(int id).Вся бизнес-логика находится в компоненте репозитория и jsonConverter.

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

2 голосов
/ 05 июля 2011

Вы написали JSON конвертер? Если нет, то я бы об этом не беспокоился. Если бы ты это сделал, я бы издевался над этим.

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