Попытка заглушка класса активности Android с помощью Powermockito бросает runtimeexception "Stub!"

StackOverflow https://stackoverflow.com/questions/3739737

Вопрос

я нашел это пример Где они использовали PowerMock и Easmock, чтобы заглушить / издеваться в меню и классам Menuitem для Android. Я пытался сделать что-то подобное с Паурмеком и Мокито с классом активности.

Я понимаю, что многие методы являются окончательными и что в Android.jar они все просто бросают Runtimeexception («заглушка!»).

Я также понимаю, что этот тест не завершен, но я просто хочу посмотреть, можно ли поднять класс активности Android.

Но учитывая, что Powermock позволяет вам высмеивать классы с окончательными методами, не должен ли этот код работать?

@RunWith(PowerMockRunner.class)
@PrepareForTest(Activity.class)
public class MyTestCase extends TestCase {

    public void testPlease_JustWork() throws Exception {
        Activity mockActivity = PowerMockito.mock(Activity.class);

        PowerMockito.when(mockActivity.getTitle()).thenReturn("Title");
    }
}

Я бы подумал, что Runtimeexception больше не будет происходить, и «название» будет возвращено, но он все еще бросает исключение.

Я пробовал все виды разных вещей, таких как doReturn("Title").when(mockActivity).getTitle(); а также suppress(constructor(Activity.class));

Я делаю что-то не так или это просто невозможно?

Это было полезно?

Решение

Я просто попробовал ваш образец кода, и он работает здесь, странно. Я скачал PowerMock 1.4.5 с помощью Mockito и Junit, включая зависимости и использовал Android.jar от SDK (2.2). Это терпит неудачу только за исключением, если я удалю @preparefortest.

РЕДАКТИРОВАТЬ

Вы можете использовать Android.jar с удаленным кодом исключения, предусмотренный в статье, которую вы указали.

Другие советы

Вероятно, не прямой ответ на ваш вопрос, но вы можете попробовать Роболектрический Для того, чтобы тестировать части вашего приложения Android на вашем компьютере.

Робоэлектрический избегает заглушки! Исключение и дает вам некоторые минимальный Android-классы внедрения

Я думаю, что ответ заключается в том, что порядок ваших ссылочных библиотек имеет значение, потому что Android.jar включает в себя некоторые заглушки для JUNIT.

Вы должны убедиться, что в вашем тестовом проекте, если вы перейдете к «свойствам», а затем «путь сборки Java», что Junit JAR, связанная с полной версией загруженного вами PowerMock, отображается на вкладке «Заказ и экспорт» над android.jar. Если это не так, система разрешает пакеты Junit.framework и Junit.runner от Android.jar, прежде чем он разрешит их от Junit.jar включен в Паурмерк.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top