Я реализую тесты с Roboelectric, и я пытаюсь выполнить тест, который должен проверить, что статический метод был или не был вызван. Мой тест выглядит так:Смыкая статические методы с Robolectric и PowerMockito
@RunWith(RobolectricTestRunner.class)
@Config(manifest=Config.NONE)
@PrepareForTest({DeviceUtils.class})
@SmallTest
public class ContactsListPresenterTest extends BasePresenterTest {
...
@Test
public void onCallContactClicked_nullArgument_methodNotCalled() {
PowerMockito.mockStatic(DeviceUtils.class);
presenter.onCallNotaryClicked(context, null);
PowerMockito.verifyStatic(Mockito.never());
DeviceUtils.dialPhoneNumber(context, Mockito.anyString());
}
@Test
public void onCallContactClicked_nullArgument_methodCalled() {
PowerMockito.mockStatic(DeviceUtils.class);
presenter.onCallNotaryClicked(context, new Contact());
PowerMockito.verifyStatic(Mockito.times(1));
DeviceUtils.dialPhoneNumber(context, Mockito.anyString());
}
}
Однако тест не удается со следующей ошибкой:
org.powermock.api.mockito.ClassNotPreparedException:
The class x.DeviceUtils not prepared for test.
To prepare this class, add class to the '@PrepareForTest' annotation.
In case if you don't use this annotation, add the annotation on class or method level.
Что я делаю неправильно? Я уже добавляю аннотацию @PrepareForTest, я думаю, что это все, потому что я использую RobolectricTestRunner вместо PowerMockitoRunner, но мне нужен RoboelectricTestRunner для других тестов в этом же классе.
Большое спасибо
Если я добавлю правило @Rule public PowerMockRule rule = new PowerMockRule(); то все тесты в классе не выполняются с помощью: java.lang.RuntimeException: java.lang.ClassNotFoundException: org.powermock.classloading.DeepCloner – FVod