2012-05-08 2 views
4

Рассмотрим следующий вывод тест:Как структурировать тесты модулей BDD по нескольким измерениям?

A passing tests spec illustrating my situation `

Резюмируя, документы Word не поддерживаются, и PDF-файлы являются. Поэтому мы немедленно отвергаем документы Word. Но для PDF-файлов существует намного больше шагов, требующих тестирования, поэтому мы делаем это.

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

function uploadDocument(type, document) { 
    if (type !== "application/pdf" && type !== "text/plain") { 
     throw new UnsupportedMediaTypeError(); 
    } 

    // do all the steps involving temp documents, hashing, ownership, etc. 
} 

Мой вопрос: как я могу структурировать свои тесты для этого? Я не хочу дублировать все дерево под «при загрузке PDF» как «при загрузке текстового файла».

Я чувствую, что сталкиваюсь с этой проблемой много. Как вы видите, я уже сделал некоторое дублирование (записи в разделе «Удаленные временные документы» и «и успешное выполнение временного документа» совпадают).

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

+1

Почему вы не можете параметризовать повествование и использовать для этого тестирование данных. За один проход вы выполняете спецификацию для PDF, а в другом запуске вы выполняете спецификацию для текстового файла. Кстати, какой инструмент вы используете для BDD? Это впечатляет. –

+0

Итак, похоже, что есть решение, и оно подпадает под имена, такие как «параметризация повествования» и «тестирование с помощью данных». Мне понравился бы ответ, объясняющий это! Что касается инструмента, мы используем [Mocha] (http://visionmedia.github.com/mocha/). – Domenic

+0

Вы изучали функцию «Совместное поведение» при мокко? Я не знаком с Mocha, поэтому вы можете спросить на форуме о том, как сделать параметризацию. –

ответ

1

мне кажется, хотел нужно разорвать этот вверх в 2-х тестов (вероятно, больше, но это другая тема)

Given A document of type <doc_type> 
Then it should have an allowed status of <status> 

Examples: 
| doc_type | status | 
| word  | fail | 
| text  | accept | 
| pdf  | accept | 

И тогда ваш тест будет упрощать

... 
when uploading a valid file type 
... 

Удачного тестирования, Llewellyn

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