Я разрабатываю приложение Android, пользующееся сторонними библиотеками (Twitter4j). Я хочу смочь насмешка те объекты (также объекты, созданные мной) в JUnit и функциональных испытаниях.
У Вас есть какие-либо хорошие события при пользовании некоторыми библиотеками насмешки, и можно ли рекомендовать им?
(Обновление: Mockito добавил поддержку Android начиная с версии 1.9.5, а EasyMock добавил поддержку Android начиная с версии 3.2, выделив те биты, которые генерируют код во время выполнения, и сделав их подключаемыми, например используя dexmaker вместо cglib.)
За исключением android-mock , упомянутого DixonD (это довольно молодая, недоказанная библиотека), в настоящее время нет решения. Вы можете сразу забыть все, что основано на CGLib ( Mockito , plain EasyMock ), поскольку CGLib полагается на генерацию байтового кода и не будет работать на Dalvik (он также полагается на пакет Java Beans. , который также не входит в состав Android).
Как бы то ни было, вы могли бы использовать очень немногие имитационные классы, поставляемые с Android (например, MockContext ), но они не проверяют поведение, они просто заглушки.Их поведение по умолчанию - генерировать ошибку времени выполнения в каждом методе, поэтому вам нужно создать подклассы и переопределить методы, которые вы хотите имитировать.
Однако вы по-прежнему можете использовать имитирующие библиотеки в тестах, не связанных с инструментарием, то есть в ваших стандартных модульных тестах, выполняемых на JVM. Вы можете использовать PowerMock для имитации методов фреймворка, он поддерживает имитацию статических методов и конструкторов, что делает имитирование столь же мощным, как, например, в Ruby (просто больнее пользоваться).
Мы используем JUnit 4 + PowerMock + Mockito и имитируем классы, такие как Context и TextUtils, в базовом классе, от которого мы наследуем каждый нормальный тест JUnit. Для инструментальных тестов мы создаем настраиваемые имитационные классы и решаем с помощью фабрики, какую реализацию (фиктивную или нет) создать во время выполнения.
Android Mock написан поверх EasyMock 2.4 , который является хорошо известным фреймворком для Java