2009-02-26 2 views

ответ

7

Ач. Мой любимый предмет :-) С чего начать ...

Согласно XUnit тестовых образцов Джерард Месарош (книга для чтения о модульном тестировании)

  • Тесты должны уменьшить риск, не ввести его.
  • Испытания должны быть легкими в управлении.
  • Тесты должны быть просты в обслуживании, как система развивается вокруг них

Некоторые вещи, чтобы сделать это проще:

  • Тесты должны терпеть неудачу только из-за одного причины. (Тесты должны проверять только одну вещь, например, избегать нескольких утверждений.)
  • По этой причине должно быть только одно испытание. (Это держит ваш testbase обслуживаемый)
  • Минимизации зависимостей между тестами (нет зависимостей от баз данных, файлов, Ui и т.д.)

других вещей, чтобы посмотреть на:

Именования
Имеет описательное имя. Имена тестов должны читаться как спецификации. Если ваши имена слишком длинны, вы, вероятно, слишком много тестируете.


Использование структуры ААА. Это новая причуда для насмешливых фреймворков, но я думаю, что это хороший способ структурировать все ваши тесты, как это.

организовать ваш контекст
закона, не вещи, которые должны быть проверены
Assert, утверждают, что вы хотите, чтобы проверить

Я обычно делю свои тесты в трех блоках кода. Знание этого шаблона делает тесты более читабельными.

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

Заглушки - это объекты, которые стоят в зависимостях объекта, который вы пытаетесь протестировать. Вы можете программировать поведение в них, и их можно вызвать в ваших тестах. Mocks расширяет это, позволяя вам утверждать, были ли они вызваны и как. Mocking очень мощный, но он позволяет протестировать реализацию вместо предварительных и пост-условий вашего кода. Это, как правило, делает тесты более хрупкими.

+0

+1 Тестовые книга XUnit является обязательным для тех, кто ИМО желая написать хорошие модульные тесты. – mezoid

+0

+1, но я должен сказать, что книга, похоже, больше касается автоматического тестирования, а не «модульного тестирования» как такового. – Spoike

1
  • нет доступа к внешним ресурсам
  • читаться
3

Ответ прагматической программистов: хорошие тесты должны быть рейсовые

  • к автоматической
  • Тщательное
  • Повторяется
  • Независимый
  • Professional
1
  • автоматизирован: без ручного вмешательства не должно требоваться для выполнения тестов (CI).
  • Завершить: они должны покрывать как можно больше кода (Code Coverage).
  • Многоразовый: нет необходимости создавать тесты, которые будут выполняться только один раз.
  • Независимый: Независимое выполнение теста не должно влиять на работу другого.
  • Professional: тесты должны быть рассмотрены с тем же значением, что и код, таким же профессионализмом, документации и т.д.
0

Другие факторы, о которых следует помнить, - это время работы. Если тест проходит слишком долго, он, скорее всего, будет пропущен.

0
  1. Должно быть полностью автоматическое.
  2. Не допускается никаких предварительных условий (продукт X будет установлен, файл и Y местоположение и т. Д.).
  3. Должно быть независимым от человека, поскольку работает сценарии. Однако результаты могут быть проанализированы только экспертами .
  4. Должен работать на каждой бета-версии.
  5. Должен выдавать поддающийся проверке отчет.
0

Единичный тест должен быть быстрым: сотни испытаний должны быть в состоянии работать через несколько секунд.

1

То, что я еще не видел, упоминается в другом месте: small. Единичный тест должен проверять одну вещь, и все. Я стараюсь иметь только одно утверждение и свести к минимуму количество кода установки путем реорганизации их в свои собственные методы. Я также создам свои собственные пользовательские утверждения. Хороший небольшой единичный тест IMO составляет около 10 строк или меньше. Когда тест небольшой, легко понять, что пытается сделать тест. Большие тесты в конечном итоге остаются незаменимыми.

Конечно, маленький - это не единственное, на что я нацелен ... это только одна из вещей, которые я ценю в модульном тесте. :-)

+0

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

0

тест не тестовый модуль, если:

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

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

источник: A Set of Unit Testing Rules

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