2010-09-17 14 views
9

Я нашел это example, где они использовали PowerMock и EasyMock, чтобы заглушить/издеваться над разделами Menu и MenuItem для Android. Я пытаюсь сделать что-то подобное с PowerMock и Mockito с классом Activity.Попытка заглушить андроид Класс активности с использованием PowerMockito throws RuntimeException «Stub!»

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

Я также понимаю, что этот тест не является полным, но я просто хочу посмотреть, можно ли высмеять класс активности 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));

я делаю что-то неправильно, или это просто не представляется возможным?

ответ

0

Я просто попробовал ваш образец кода, и он работает здесь, странно. Я загрузил PowerMock 1.4.5 с Mockito и JUnit, включая зависимости, и использовал android.jar из sdk (2.2). Это происходит только с исключением, если я удаляю @PrepareForTest.

EDIT

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

+0

Я дам ему попробовать ... – bytebender

+0

Нет кубиков, вы можете показать мне, как выглядят ваши линии импорта? – bytebender

+0

Я загрузил весь проект затмения на http://maik.0x2a.at/PowerMockTests.zip. Возможно, вам придется адаптировать путь к android.jar – crazymaik

5

Вероятно, это не прямой ответ на ваш вопрос, но вы можете попробовать Robolectric, чтобы протестировать части вашего приложения на вашем ПК.

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

2

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

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

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