Тестовый метод (Test Method)
Что такое ед иничный тест? Это метод , имя которого начинается с
префикса test.
В процессе разработки вам прид ется иметь д ело с сотнями, а может
быть, и тысячами тестов, как можно услед ить за всеми этими тестами?
Языки
объектно-ориентированного
программирования
обеспечивают трехуровневую организацию исход ного код а:
• мод уль (в языке Java –
пакет
, по-английски,
package
);
• класс;
• метод .
Если мы пишем тесты как обычный исход ный код , мы д олжны
найти спо соб организации тестов с использованием элементов этой
структуры. Если мы используем классы д ля пред ставления фикстур,
значит, метод ы этих классов являются естественным местом размещения
тестирующего код а. Все тесты, использующие некоторую фикстуру,
д олжны быть метод ами од ного класса. Тесты, работающие с д ругой
фикстурой, д олжны располагаться в д ругом классе.
В xUnit используется соглашение, в соответствии с которым имя
тестового метод а д олжно начинаться с префикса test. Специальные
инструменты могут автоматически производ ить поиск таких метод ов и
созд авать из них наборы тестов (TestSuite). Остальная часть имени теста
д олжна информировать буд ущего, ни о чем не вед ающего читателя,
зачем написан д анный тест. Например, в наборе тестов, созд анных при
разработке инфраструктуры JUnit, можно обнаружить тест с именем
testAssertPosInfinityNotEqualsNeglnfinity. Я не помню, чтобы я писал этот
тест, од нако, исход я из имени, могу пред положить, что в какой то
момент разработки было обнаружено, что код метод а assert()
инфраструктуры JUnit д ля чисел с плавающей точкой не д елал различия
межд у положительной и отрицательной бесконечно стью. Использовав
тест, я могу быстро найти код JUnit, о существляющий сравнение чисел с
плавающей точкой, и по смотреть, как о существляется обработка
положительной и отрицательной бесконечно сти. (На самом д еле код
выгляд ит не ид еально – д ля под д ержки бесконечно сти используется
условный оператор).
Код тестового метод а д олжен легко читаться и быть максимально
прямолинейным. Если вы разрабатываете тест и вид ите, что его код
становится слишком д линным, попробуйте поиграть в «д етские шажки».
Цель игры – написать самый маленький тестовый метод , который
пред ставляет собой реальный прогресс в направлении вашей конечной
цели. Размер в три строки, суд я по всему, является минимальным
размером (если, конечно, вы не хотите д елать тест намеренно
бессмысленным). И по стоянно помните о том, что вы пишете тесты д ля
люд ей, а не только д ля компьютера и себя самого.
Патрик Логан (Patrick Logan) рассказал об ид ее, с которой я намерен
поэкспериментировать. Эта ид ея также описана Макконнеллом
(McConnell)
[21]
, а также Кэйном (Caine) и Горд оном (Gordon)
[22]
:
В
последнее время я фактически постоянно применяю методику
«основных тезисов» в любой моей работе. Тестирование не является
исключением. Когда я пишу тесты, я прежде всего записываю план из
нескольких пунктов – тезисов, – которые я хотел бы реализовать в этом
тесте. Например
:
/* Добавить в про странство кортежей
[23]
*/
/* Извлечь из про странства кортежей */
/* Читать из про странства кортежей */
Это самые основные тезисы, однако я добавляю в каждую из этих
категорий конкретные тесты. Когда я добавляю тесты, я добавляю в мой
список тезисов еще один уровень комментариев:
/* Добавить в про странство кортежей */
/* Извлечь из про странства кортежей */
/** Извлечение несуществующего элемента **/
/** Извлечение существующего элемента **/
/** Извлечение нескольких элементов **/
/* Читать из про странства кортежей */
Как правило, мне хватает двух-трех уровней комментариев. Я не
могу представить ситуацию, в которой мне могло бы потребоваться
больше уровней. Список тезисов становится документацией контракта
для тестируемого класса. Приведенные здесь примеры, конечно же,
сокращены, однако в языках программирования, поддерживающих
контракты, тезисы могли бы быть более конкретными. (Я не использую
какие-либо добавления к Java, обеспечивающие автоматизацию в стиле
Eiffel.)
Сразу же после самого низкого уровня комментариев располагается
исходный код теста.
Do'stlaringiz bilan baham: |