Доступна ли библиотека оптимизации PNG? [закрыто]

Да, вы должны полностью протестировать базу данных. Время, в которое вы насмехаетесь, меньше, и ценность, которую вы получаете от насмешек, очень меньше (80% вероятных ошибок в вашей системе нельзя отбросить из-за насмешек).

Когда вы проверяете весь путь от контроллера к БД или веб-службе, это не называется модульным тестированием, а интеграционным тестированием. Я лично верю в интеграционное тестирование, а не в модульное тестирование. И я могу успешно выполнить тестовое развитие.

Вот как это работает для нашей команды. Каждый тестовый класс в начале восстанавливает БД и заполняет / сортирует таблицы с минимальным набором данных (например, роли пользователя). На основе потребностей контроллеров мы заполняем БД и проверяем, выполняет ли контроллер его задачу. Это спроектировано таким образом, что поврежденные DB данные, оставленные другими методами, никогда не завершится. За исключением времени, которое нужно выполнить, почти все качества модульного теста (хотя это и есть теория) являются gettable.

В моей карьере было всего 2% ситуаций (или очень редко), когда меня заставили использовать mocks / stubs, так как не удалось создать более реалистичный источник данных. Но во всех других ситуациях интеграционные тесты были возможны.

Нам потребовалось время, чтобы достигнуть зрелого уровня с помощью этого подхода. у нас есть хорошая структура, которая касается совокупности и поиска тестовых данных (граждан первого класса). И это окупает большое время :). Первый шаг - попрощаться с издевательствами и модульными тестами. Если насмешки не имеют смысла, то они не для вас! Тест интеграции дает вам хороший сон

============================================

Отредактировано после комментария ниже: Демо

Интеграционный тест или функциональный тест должен иметь дело непосредственно с БД. Никаких насмешек. Итак, это шаги. Вы хотите проверить getEmployee (). все эти 5 шагов ниже выполняются одним методом испытаний.

  1. Drop DB
  2. Создать БД и заполнить роли и другие данные
  3. Создать запись сотрудника с идентификатором
  4. Использовать это ID и вызов getEmployee ()
  5. Now Assert () / Проверить правильность возвращаемых данных. Это доказывает, что работает getEmployee (). Шаги до 3 требуют, чтобы код использовался только тестовым проектом. Шаг 4 вызывает код приложения. То, что я имел в виду, это создание сотрудника (шаг 2), должно выполняться кодом кода проекта, а не кодом приложения. Если для создания сотрудника существует код приложения (например: CreateEmployee ()), это не должно использоваться. Точно так же, когда мы тестируем CreateEmployee (), тогда код приложения GetEmployee () не должен использоваться. Мы должны иметь тестовый код проекта для извлечения данных из таблицы.

Таким образом, нет никаких издевок! Причиной отказа и создания БД является предотвращение ошибочных данных БД. С нашим подходом тест пройдет независимо от того, сколько раз мы его запускаем.

Специальный совет: на шаге 5, если getEmployee () возвращает объект employee. Если позднее разработчик удаляет или изменяет имя поля, тест прерывается, потому что поля проверяются. Что делать, если разработчик добавит новое поле позже? И он / она забывает добавить тест для него (утверждать)? Решение состоит в том, чтобы всегда добавлять проверку количества полей. например: Объект Employee имеет 4 поля (Имя, Фамилия, Обозначение, Пол). Таким образом, количество полей объекта сотрудника - 4. И наш тест завершится неудачно из-за подсчета и напомнит разработчику добавить поле подтверждения для вновь добавленного поля. А также наш тестовый код добавит это новое поле в БД и получит его и проверит.

И это отличная статья, в которой обсуждаются преимущества тестирования интеграции над модульным тестированием , потому что «модульное тестирование убивает!» (говорит он)

15
задан John Saunders 24 February 2013 в 09:13
поделиться