Я хотел реализовать собственный класс Application
Shadow для переопределения метода getInstance()
. Я использую Robolectric 3.0 и создали MyRobolectricTestRunner
класс, перекрывая createClassLoaderConfig()
метод, как это:Robolectric custom TestRunner не работает при запуске с Gradle
public class MyRobolectricTestRunner extends RobolectricTestRunner {
public MyRobolectricTestRunner(Class<?> testClass) throws InitializationError {
super(testClass);
}
@Override
public InstrumentationConfiguration createClassLoaderConfig() {
InstrumentationConfiguration.Builder builder = InstrumentationConfiguration.newBuilder();
builder.addInstrumentedClass(App.class.getName());
return builder.build();
}
}
Класс ShadowApp выглядит следующим образом:
@Implements(App.class)
public class ShadowApp{
@RealObject private static App instance;
public static void setAppInstance(App app){
instance = app;
}
@Implementation
public static App getInstance(){
return instance;
}
}
И тест, который использует бегун аннотированный как это:
@RunWith(MyRobolectricTestRunner.class)
@Config(manifest=Config.NONE, shadows = {ShadowApp.class}, constants = BuildConfig.class, sdk = 21)
public class SomeShadowTest {
Теперь проблема в том, что при запуске теста вручную (нажать «выполнить ...» для этого одного тестового только класса), он проходит Wi Проблема, но когда я использую задачу Gradle «testDebug», тест терпит неудачу, как если бы класс Shadow не использовался вообще :(
Я попытался изменить родительский класс Runner на RobolectricGradleTestRunner
, но оказался в тупик, когда он заставил меня сделать класс ShadowApp
, расширить класс ShadowApplication
, у которого также есть метод getInstance() :(
Любые советы о том, как решить эту проблему?
Есть ли что-нибудь в журналах, которые могли бы помочь? Любые ошибки, предупреждения? Вы пытались запустить с --info или --debug для более подробного вывода? Кроме того, если вы попытаетесь запустить весь пакет из AS, а не только этот тест, он также работает нормально? –