2016-10-25 3 views
0

Я реализую тесты с 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 для других тестов в этом же классе.

Большое спасибо

ответ

1

Вы используете PowerMockRule? как указано в Robolectric docs

+0

Если я добавлю правило @Rule public PowerMockRule rule = new PowerMockRule(); то все тесты в классе не выполняются с помощью: java.lang.RuntimeException: java.lang.ClassNotFoundException: org.powermock.classloading.DeepCloner – FVod

Смежные вопросы