Поблочное тестирование: действительно ли это - хорошая практика, чтобы иметь утверждения в методах установки?

Активный каталог (AD) немного более сложен, чем просто совместное использование самбы.

https://help.ubuntu.com/community/ActiveDirectoryWinbindHowto

AD является заменой для окон 'домены' и имеет сервер аутентификации. Это не то же как основанные на рабочей группе доли, для которых просто нужен загруженный cifs, и Вы находитесь в.

31
задан Community 23 May 2017 в 12:25
поделиться

5 ответов

Вместо утверждений в настройке для проверки результата я использовал простой тест (метод тестирования наряду с другими, но позиционируется как первый метод тестирования).

Я увидел несколько преимуществ:

  • Настройка остается короткой и сфокусированной для удобства чтения.
  • Утверждения запускаются только один раз, что более эффективно .

Использование и обсуждение :

Например, я назвал метод testSetup ().

Чтобы использовать его, когда у меня есть какие-то тестовые ошибки в этом классе, я знаю, что если testSetup () имеет ошибку, мне не нужно беспокоиться о других ошибках, мне нужно сначала исправить эту.

Если кого-то это беспокоит и он хочет сделать эту зависимость явной, можно вызвать testSetup () в методе setup (). Но я не думаю, что это важно. Я хочу сказать, что в JUnit у вас уже может быть что-то подобное в остальных ваших тестах:

  1. некоторые тесты, которые проверяют локальный код,
  2. и некоторые тесты, которые вызывают более глобальный код, который косвенно вызывает тот же код, что и предыдущий тест.

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

15
ответ дан 27 November 2019 в 22:37
поделиться

Не рекомендуется использовать утверждения в методах Setup / TearDown. Это делает тест менее читаемым, если пользователю нужно «понять», что часть логики тестирования отсутствует в методе тестирования. Бывают случаи, когда у вас нет выбора, кроме как использовать методы установки / удаления для чего-то другого, кроме того, для чего они предназначены.

В этом вопросе есть более серьезная проблема: тест, который вызывает другой тест, это запах какой-то проблемы в ваших тестах. Каждый тест должен тестировать определенный аспект вашего кода и должен содержать только одно или два утверждения, поэтому, если ваш тест вызывает другой тест, вы можете тестировать слишком много вещей в этом тесте. Для получения дополнительной информации прочтите: Модульное тестирование: один тест, одно утверждение - почему это работает

9
ответ дан 27 November 2019 в 22:37
поделиться

Следуй своему сердцу / Мигающим решениям. Утверждения в методе установки могут документировать намерение; улучшает читаемость. Так что лично я поддержу вас в этом.
Он отличается от теста, вызывающего другие тесты, что плохо. Нет тестовой изоляции. Тест не должен влиять на результат другого теста.

Хотя это не частый случай использования, я иногда использую Asserts внутри метода установки, чтобы знать, не произошла ли тестовая установка, как я предполагал; обычно, когда я имею дело с компонентами, которые не писал сам. Ошибка утверждения с сообщением «Ошибка установки!» на вкладке ошибок - быстро помогает мне сосредоточиться на коде установки, вместо того, чтобы просматривать кучу неудачных тестов.

Ошибка настройки обычно приводит к сбою всех тестов в этом приборе - запах, который скоро уловит ваш нос. «Все тесты не пройдены, как правило, это означает, что установка сломалась» Таким образом, утверждения не всегда нужны. При этом будьте прагматичны, посмотрите на свой конкретный контекст и «Добавьте по вкусу».

3
ответ дан 27 November 2019 в 22:37
поделиться

Я использую утверждения Java, а не JUnit, в тех случаях, когда что-то подобное необходимо. например, когда вы используете какой-либо другой служебный класс для настройки тестовых данных.:

byte[] pkt = pktFactory.makePacket(TIME, 12, "23, F2");
assert pkt.length == 15;

Отказ подразумевает, что «система не в состоянии даже попытаться запустить этот тест».

3
ответ дан 27 November 2019 в 22:37
поделиться

Это разные сценарии; Не вижу сходства.

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

С другой стороны, если настройка настолько сложна, что вы чувствуете необходимость подтвердить ее правильность, это может быть предупреждающим знаком. Более того, если все тесты не требуют полного вывода установки, то это признак того, что прибор имеет плохую согласованность и должен быть разделен на основе сценариев и / или рефакторинга.

Отчасти из-за этого я предпочитаю оставаться от использования методов установки. По возможности я использую частные фабричные методы или аналогичные для настройки. Это делает тест более читабельным и позволяет избежать путаницы. Иногда это нецелесообразно (например, г. работа с тесно связанными классами и / или при написании интеграционных тестов), но для большинства моих тестов он выполняет свою работу.

9
ответ дан 27 November 2019 в 22:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: