Типы методов, которые сложно тестировать? - PullRequest
0 голосов
/ 29 августа 2010

Какие юнит-тесты обычно сложно написать и почему?Я особенно интересуюсь методами, которые не нуждаются в насмешках.

Спасибо

Ответы [ 4 ]

1 голос
/ 29 августа 2010

Два случая, когда модульное тестирование затрудняется:

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

Методы, которые создают экземпляры других классов напрямую (т. Е. Через new), особенно когда конструктордругой класс сам требует статического состояния или когда он выполняет значительную работу в конструкторе.

0 голосов
/ 29 августа 2010

Это почти всегда о зависимостях.

Большая часть кода зависит от внешних систем, таких как базы данных, файловые системы, почтовые клиенты, сети и т. Д. Также распространены зависимости от основных внутренних систем (например, модуля проверки орфографии или механизма пересылки ...)

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

Есть несколько законных ситуаций, которые трудно проверить:

  1. параллелизм
  2. Пользовательский интерфейс - вот почему наблюдается тенденция к архитектуре MVC, которая создает модели представления, которые можно легко тестировать. Фактическое отображение сведено к минимуму - это называется скромным диалогом или шаблоном скромного объекта в тестовой литературе.
0 голосов
/ 29 августа 2010

Большие, сложные методы, которые делают много вещей одновременно, которые действительно должны были быть разделены. (пример: получить что-то из объекта конфигурации, создать URL-адрес на основе некоторых переменных, закодировать URL-адрес, отправить запрос, сделать что-то с ответом ... вы получаете детализацию).

Все статично. Вещи, созданные с помощью New, хотя я не нашел подходящего способа избежать этого, не рассылая все приложение фабриками.

0 голосов
/ 29 августа 2010

Отличное руководство по тестируемости от А до Я с рядом кодов Примеры простого / сложного для тестирования кода можно найти в обширном руководстве по тестированию Миско

Нажмите на ссылки "flaw #x" (они выглядят как обычный текст, но это отдельные ссылки).

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