2012-02-17 7 views
0

В тестовом проекте для моего приложения Android у меня первоначально была серия тестов для нескольких классов низкого уровня. На низком уровне я имею в виду, что они не являются деятельностью, услугами или чем-то конкретным. Это просто занятия, выполняющие некоторые работы в соответствии со спецификациями. Они ретранслируют хотя по некоторой информации из контекста приложения: база данных, некоторые ресурсы и т. Д.Единичные тесты классов андроидов

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

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

Итак, вот мой вопрос: как я могу тестировать класс, который требует только контекста приложения, но ничего другого? Как я могу препятствовать тому, чтобы среда выполнения пыталась запустить какие-либо действия, о которых я не забочусь?

+0

Взгляните на [Robotium] (http://code.google.com/p/robotium/), он работает очень хорошо. Если вы использовали Selenium, некоторые аспекты должны быть знакомы. – Android

+0

@ Андроид Он хочет провести единичный тест. Robotium предназначен для тестирования [черный ящик] (http://en.wikipedia.org/wiki/Black-box_testing), а не модульного тестирования. Если вы действительно хотите [unit test] (http://en.wikipedia.org/wiki/Unit_testing) Android-приложения, Robolectric - единственный способ пойти. –

ответ

2

Похоже, что вы хотите удалить Android из своих модульных тестов. Было бы неплохо, если бы вы могли использовать Mocks для этого, но, к сожалению, если вы задействуете фреймворк Android, вы сталкиваетесь со множеством проблем, пытающихся издеваться над вещами.

Я настоятельно рекомендую вам использовать Robolectric для «defang» android и использовать Mockito, чтобы издеваться над материалами, которые вам не нужны. Это позволит вам продолжить выполнение модульных тестов (я делаю здесь предположение) на JVM.

+0

тесты на локальном уровне были бы приятными, но это больше, чем то, что я могу бать в данный момент. – mfeingold

+0

Это не так плохо, как кажется, и IMO намного проще, чем работать с базой тестирования Android, как только вы настроитесь , Инструкции по настройке Robolectric можно найти здесь (http://pivotal.github.com/robolectric/eclipse-quick-start.html), если вы используете Eclipse. Настройка займет всего около 15 минут. Если вы пытаетесь написать настоящие модульные тесты, это лучший способ сделать это, потому что модульное тестирование - это все, чтобы изолировать ваши классы, поэтому вы хотите отключить Android и научитесь издеваться над этими классами которые не являются текущим классом. –

0

Трудно сказать, учитывая то, что вы сообщили до сих пор.

Вы всегда использовали InstrumentationTestRunner для запуска модульных тестов? Вы должны использовать Instrumentation и InstrumentationTestRunner для тестирования всего, что использует инфраструктуру Android, например компонентов (Activity, Service, content provider) или Context.

Это описано в разделе Тестирование в Руководстве для разработчиков.

+0

Да, тестовый проект настроен на запуск InstrumentationTestRunner (его подкласс). – mfeingold

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