Эффективный модульный тест

23 апреля 2009 г.

На сколько ваши тесты эффективны? Получаете ли вы максимум отдачи от создания тестов? Тесты должны экономить время, затраченное на разработку системы в целом. Время - это деньги вашего заказчика.

Тест эффективен, если...

Написан до написания кода, который он тестирует

Это обязательное условие успешной разработки.

Независим от других тестов

Тест не должен зависеть от удачного/неудачного окончания других тестов или от данных, которые эти тесты используют.

Не зависит от внешних источников данных

Тесты должны проходить быстро. Иначе отпадет желание запускать их часто. Это может случится, если в тесте вы пытаетесь проверить данные, которые берутся из базы данных, файловой системы и т.п. Для избежания этой проблемы необходимо использовать поддельные реализации источников данных (mock objects).

Не зависит от модулей, которые не участвуют в тестировании

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

Является документацией к модулю, который тестирует

Чтобы понять, как использовать API системы, разработчики и пользователи смотрят тесты, которые используют интересующие их модули.

Является повторяемым

При каждом запуске тест должен показывать один и тот же результат.

Имеет название, которое показывает цель этого теста

Название должно показывать суть теста, возможно объяснять его результат, но не должно просто повторять название вызываемого метода.

Плохое название : Save

Хорошее название: SaveShouldClearAllRelatedData

Модульные тесты позволяют ускорить процесс разработки системы, дают вам уверенность при рефакторинге и являются самой актуальной документацией. Стремитесь к лучшему соотношению результата к затраченным ресурсам, повышайте вашу эффективность.

2 комментария:

  1. Мне больше нравится именование тестов в стиле MethodUnderTest_Scenario_ExpectedBehavior. А здесь можно взять темплейты для Resharper с подобным именованием.

    ОтветитьУдалить
  2. @Idsa
    Спасибо за ссылку. Да, я тоже иногда именю через подчеркивание, если название очень длинное получается.

    ОтветитьУдалить

Моя книга «Антихрупкость в IT»

Как достигать результатов в IT-проектах в условиях неопределённости. Подробнее...