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