2013-11-02 2 views
0

Вскоре мы начнем новый проект. Это будет веб-приложение на основе Spring MVC. Впервые мы решили начать писать тесты в приложении.Сценарий с открытым исходным кодом MVC с испытаниями Junit?

Мы будем использовать Junit, Mockito и Hamcrest для написания тестов.

Поскольку это будет наш первый раз, когда мы будем писать тесты, и у нас также нет никого в команде с опытом работы с письменными тестами, мы ищем некоторые примеры приложений, которые мы можем использовать в качестве ссылки.

Мы прошли через сеть и красные несколько статей о том, как писать тесты с использованием junit и т. Д., Что является лучшими практиками при написании тестов и т. Д., Но пока не видели реального приложения для реального мира.

Мы не хотим начинать писать плохие тесты.

Пожалуйста, помогите.

+2

Вы не будете писать совершенные тесты с первого дня, независимо от того, насколько сильно вы стараетесь. Это будет кривой обучения для вашей команды. Одно из предложений заключалось бы в том, что вы могли бы использовать http://codereview.stackexchange.com, чтобы получить обратную связь по некоторым вашим тестам, когда начнете их писать. Единственная опасность заключается в том, что сообщество SE содержит по меньшей мере столько мнений, сколько пользователей. –

ответ

4

Это далеко не окончательный список, но некоторые рекомендации из моего опыта

  1. Действительно пытаются проверить единицы, тем более, что вы используете JUnit (в отличие от TestNG, например). Это означает, что если вы найдете какой-то порядок выполнения в ваших тестах, то вы не тестируете единицы измерения, теперь вы тестируете интеграцию или функциональные возможности.

  2. Что касается №1, я настоятельно рекомендую использовать насмешливую библиотеку, похоже сделав. Я использую Mockito, он очень прост в использовании, и тесты в конечном итоге очень читаемы. Причина, по которой вы нуждаетесь в этом, заключается в том, что любой разумный класс имеет зависимости от других классов (если не btw, ваши классы, вероятно, не очень сплоченны) или внешних ресурсов (DBs и т. Д.), А потому, что при модульном тестировании вы должны тестировать только один класс в то время вам нужно издеваться над другими классами, которые не тестируются.

  3. Конструкция для испытания. Это сложно, потому что я считаю, что вам не следует раскрывать (т. Е. Делать public) методы для тестирования, но иногда вам может понадобиться сделать некоторые частные методы защищенными пакетами, чтобы модульные тесты могли их напрямую вызвать. Это очень полезно, когда ваши методы выполняют те вещи, которые вы не хотите выполнять в тестовой среде (например, создание файлов), чтобы вы могли разделить эти особые части на отдельные методы, которые затем можно избежать в своем тесте. Убедитесь, что вы комментируете javadoc, когда метод не должен использоваться вне модульных тестов.

  4. Старайтесь избегать создания/открытия ресурсов в ваших методах работы. Например, вместо использования параметра File, который затем открывается в вашем методе и создайте InputStream, передайте InputStream напрямую. Таким образом, при тестировании вы можете передать поток памяти. Или более общим способом, dependency injection отлично сочетается с модульным тестированием. Каждый раз, когда вы вызываете new в своих методах, это, вероятно, сделает ваши юнит-тесты более трудными для запуска и/или подтверждения

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

Наверняка многие люди не согласятся с некоторыми или всеми из них, к тем людям, не держать его в себе, комментарий на этот ответ, так что есть еще один POV рядом. Это тоже поможет мне

Смежные вопросы