Как провести рефакторинг моего класса, чтобы я мог его тестировать? - PullRequest
2 голосов
/ 21 мая 2010

Я пытаюсь выполнить модульное тестирование класса, который выполняет синтаксический анализ SAX и создает объект. Этот класс принимает строку в качестве параметра, представляющего URL-адрес документа в Интернете, анализирует его и затем создает объект на основе содержимого.

Я не хочу, чтобы модульные тесты действительно имели доступ к сети, поэтому я хотел бы иметь несколько тестовых XML-файлов для анализа. Однако я не могу понять, как получить к ним доступ из моих AndroidTestCases. Я не хочу включать тестовые файлы с реальным приложением, я хочу, чтобы они были в тестовом проекте (это отдельный проект, так как это норма для тестов Android из того, что я мог собрать - из-за необходимости иметь собственный AndroidManifest .xml, для одного).

Одним из способов было бы поместить файлы XML в каталог ресурсов тестового проекта, я могу прочитать их, используя getContext().getAssets().open(filename) в InputStream в тестовом примере, но мой класс ожидает строку URL. Я бы предпочел не предоставлять InputStream этому классу вместо текущей строки URL. Я могу протестировать только синтаксический анализ, сделав два метода, один из которых принимает строку, а другой - Inputstream, и протестировать второй, но как я могу затем проверить тот, который просто принимает строку?

Как мне разработать свой класс и / или тесты, чтобы обойти эту проблему?

1 Ответ

0 голосов
/ 21 мая 2010

Вы хотели бы пойти с инъекцией зависимости. Исходя из того, что я прочитал, у вас есть подпись метода, например, так:

 string -> object // using lambda notation

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

Методу не важно, какой у него объект, если он возвращает какой-то текст для анализа, будь то XHTML или XML.

...