Как JUnit тестировать объекты, которые анализируются из файла - PullRequest
4 голосов
/ 08 сентября 2011

Я работаю с программой, которая разбирает некоторые файлы и затем обрабатывает эти файлы.Парсер хорошо протестирован, но я должен также протестировать и обрабатывающую часть.Проблема состоит в том, что для модульного тестирования функций мне нужны большие объекты, которые поступают от анализатора.Я не хочу создавать объекты вручную (это слишком много времени).Моя цель состоит в том, чтобы реорганизовать некоторые функции процесса, потому что некоторые функции выполняют много задач и работают с огромными объектами.

Язык java, и я использую JUnit.

Я пытался сохранить объекты и загрузить их в модульном тесте, но это единственный способ?Есть предложения?

Заранее спасибо, Питер

Ответы [ 4 ]

1 голос
/ 08 сентября 2011

Вы можете попытаться макетировать проанализированные объекты , определяя только необходимые возвращаемые значения для определенных методов, вызываемых кодом обработки.Это полезно, если создание объекта является сложным и / или объект имеет много внешних зависимостей.

Другие варианты - это то, что вы перечислили: загружать проанализированные объекты из файлов напрямую или создавать их вручную в своих модульных тестах,Я обычно предпочитаю последний вариант, потому что модульные тесты должны быть максимально автономными.Обратите внимание, что создание вручную может быть утомительным, но вам нужно написать этот код только один раз, затем вы можете использовать его с различными параметрами для всех ваших модульных тестов.В то время как при использовании файлового подхода вам необходимо создавать множество файлов, которые, вероятно, различаются по размеру, и они быстро становятся головной болью при обслуживании.Например, что если формат файла изменится в следующем выпуске?Вам необходимо вручную отредактировать все тестовые файлы.При первом подходе вам нужно всего лишь изменить код установки теста в одном месте.

1 голос
/ 08 сентября 2011

Когда вы говорите "большие объекты", вы имеете в виду, что они собираются из объектов многих классов?

Это наводит на мысль, что вам нужно упростить API, используемый для создания этих объектов.Вы можете попробовать использовать шаблон проектирования Builder. Шаблон проектирования Builder полезен, когда вам нужно сделать много вещей для создания объекта .Вместо парсера, создающего «большие объекты», он должен делегировать объекту Concrete Builder, который создает объекты для него.Вы можете протестировать анализатор с помощью Test Spy Builder.Ваши модульные тесты «процессорной» части могут использовать тот же Concrete Builder для упрощения (абстрактного) создания объектов.Если он все еще слишком сложен, рассмотрите возможность использования шаблона проектирования Фасад: наложите другой API поверх Concrete Builder, чтобы упростить создание объектов.

Когда вы говорите «большие объекты», вы подразумеваете, что они занимаютмного памяти?

Это говорит о том, что вы подходите к модульному тестированию неправильно.Попробуйте поэтапный подход, когда вы начнете с очень простых и маленьких случаев.

0 голосов
/ 08 сентября 2011

Два жизнеспособных варианта:

  1. использовать API, используемый синтаксическим анализатором, для создания одного или нескольких наборов объектов для выполнения тестов обработки на
  2. написать некоторый простой тестовый код, который генерирует временные файлы или буферы в памяти в формате, считываемом анализатором

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

0 голосов
/ 08 сентября 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...