среда, 15 июля 2009 г.

Паттерны тестирования. Timestamped Name

Я уже упоминал про желание складировать полезные мысли о проектировании автоматизированных тестов - паттернах и стратегиях тестирования. Данная запись одна из, надеюсь, многих и связана с использованием времени - как одного из вспомогательных факторов при создании объектов в процессе тестирования.

Timestamped Names

Имя паттерна: Timestamped Names
Назначение паттерна: Создание уникального имени для объекта

Во время прогона тестов, часто возникает ситуация когда необходимо создать новый объект. У любого объекта есть, как минимум, две характеристики: уникальный идентификатор и имя. Уточним, что имя должно быть более или менее понятным после прочтения (Good, Project etc), т.е. изначально все таки задается текстовая константа, по которой объект и будет именоваться.

У нас есть несколько путей задания задания константы:
- hardcoded константа,
- константа в конфигурационном файле.

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

Случается, что имя объекта также должно быть еще и уникальным. И тут указание имен в конфигурационные файлы выносить проблематично. Создаваться может несколько объектов одного типа, но требуются разные имена. Создавать для каждого объекта отдельную константу - слишком сложно (например имена для 1000 объектов). Нужен smart dynamic name. В данном случае - добавление временного префикса или постфикса к имени объекта. Само имя может как задаваться hardcoded, так и храниться во временном файле.

Например мы создаем товар Goods и и после выполнения timestamped операции получаем имя Goods_<...>, где <...> - это timestamped индекс. В будущем если мы захотим найти товар, с вероятностью 99,99999 мы найдем по данному имени только один товар. Оставшийся 0,00...1% я оставляю на проблемы с потоками, из за которых могут возникнуть два товара с одинаковым именем. Эта проблема известна и решаема, в каждом языке программирования - по своему.

В качестве альтернативы Timestamped Names можно использовать Indexed Name. Данный паттерн к имени создаваемого объекта добавляет числовой префиск или постфикс, который после именования очередного объекта увеличивается на единицу или на определенный шаг.

Комментариев нет:

Отправить комментарий