TDD дублирование тестовых данных - PullRequest
4 голосов
/ 31 января 2011

Я новичок в тестировании управляемой разработки и впервые пытаюсь использовать его в простом проекте.

У меня есть класс, и мне нужно протестировать создание, вставку и удаление объектов этого класса. Если я пишу три отдельные тестовые функции, мне нужно продублировать коды инициализации в другой функции. С одной стороны, если я помещу все тесты в одну тестовую функцию, это противоречит одному тесту на функцию. Что мне делать?

Здесь ситуация:

tst_create()
{
   createHead(head);
   createBody(body);
   createFoot(foot);
}

tst_insert()
{
   createHead(head);
   createBody(body);
   createFoot(foot);

   obj_id=insert(obj); //Also I need to delete obj_id somehow in order to preserve old state
}

tst_delete()
{
   createHead(head);
   createBody(body);
   createFoot(foot);

   obj_id=insert(obj); 

   delete(obj_id);
}

против

tstCreateInsertDelete()
{
   createHead(head);
   createBody(body);
   createFoot(foot);

   obj_id=insert(obj);

   delete(obj_id);
}

Ответы [ 2 ]

6 голосов
/ 31 января 2011

Вместо «Один тест на функцию» попробуйте думать об этом как «Один аспект поведения на функцию».

Что дает вставка объекта? Как насчет удаления объекта? Почему это ценно? Как вы можете сказать, что вы сделали их? Напишите пример того, как можно использовать код и почему это поведение ценно. Это становится твоим испытанием.

Когда вы выясните, какое поведение вас интересует, извлеките дубликат , только если он сделает тест более читабельным . TDD - это не только тестирование; это также относится к предоставлению документации и помогает вам задуматься об ответственности каждого элемента кода и его дизайне. Тесты, вероятно, будут прочитаны гораздо больше, чем написаны, поэтому читаемость должна быть на первом месте.

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

4 голосов
/ 31 января 2011

Фактор дублирования в ваших тестах.

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

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

Если вы сообщите нам, какой язык и рамки тестирования вы используете, мы могли бы дать более конкретный совет.

...