мне нужно было также ссылку на приложение, чтобы запустить модуль Dagger2. После нескольких попыток и получать ту же ошибку, литое исключения вы получаете Я сделал мое приложение следующим образом
public class App extends Application {
private static AppComponent appComponent;
@Override
public void onCreate() {
super.onCreate();
if(appComponent==null){
appComponent = DaggerAppComponent.builder().appModule(new AppModule(this)).build();
}
}
public static AppComponent getAppComponent() {
return appComponent;
}
public static void setAppComponent(AppComponent component){
appComponent = component;
}
}
И в моем Robolectric/PowerMock тестер:
@Before
public void before() throws Exception {
App appMocked = PowerMockito.mock(App.class);
App.setAppComponent(DaggerAppComponent.builder().appModule(new AppModule(appMocked)).build());
....
}
Тогда моя деятельность просто вызванный для App.getAppComponent().inject(this);
FYI, я попытался не издеваться над классом приложения и использовал ((App)RuntimeEnvironment.application)
, но это не сработало. Я также попытался подклассифицировать его и использовать его в конфигурации приложения Robolectric, но в итоге появился вопрос о кастинге. Поэтому я надеюсь, что это может помочь.
Конечно, этот сеттер не должен вступать в серийное производство. Но это единственный способ понять, как это работает.
Вы можете видеть в отладочных именах полного класса? –
Да, я могу, и это RoboApplication, тот же тип в конфигурации. –