AndroidInjector 및 하위 구성 요소를 사용하면 범위가 지정된 활동 범위를 에스프레소의 Test 클래스에 삽입 할 수 없습니다.AndroidInjector 및 Espresso
이전에는 응용 프로그램 수준 구성 요소 및 활동 구성 요소를 사용하여 활동 구성 요소를 상속 한 테스트 구성 요소를 만들면 활동이 아닌 테스트 클래스에 대해 inject()를 호출 할 수있었습니다.
예 :
활동의 구성 요소
@ActivityScope
@Component(
dependencies = ApplicationComponent.class,
modules = {
NowPlayingActivityModule.class
})
public interface NowPlayingActivityComponent {
void inject(NowPlayingActivity activity);
}
테스트 클래스 구성 요소
@ActivityScope
@Component(
dependencies = TestApplicationComponent.class,
modules = {
TestNowPlayingActivityModule.class,
ActivityModule.class
})
public interface TestNowPlayingActivityComponent extends NowPlayingActivityComponent {
void inject(NowPlayingActivityTest nowPlayingActivityTest);
}
테스트 모듈
@Module
public class TestNowPlayingActivityModule {
private NowPlayingActivityModule nowPlayingActivityModule;
public TestNowPlayingActivityModule(NowPlayingActivityModule nowPlayingActivityModule) {
this.nowPlayingActivityModule = nowPlayingActivityModule;
}
@Provides
@ActivityScope
public ServiceGateway providesServiceGateway(ServiceApi serviceApi) {
return nowPlayingActivityModule.providesServiceGateway(serviceApi);
}
@Provides
@ActivityScope
public NowPlayingPresenter providesNowPlayingPresenter(NowPlayingInteractor nowPlayingInteractor) {
//In order to make sure espresso idles the view checks, we put the IdlingResource on the presenter.
return Mockito.spy(new NowPlayingPresenterImpl_IdlingResource(nowPlayingActivityModule.getNowPlayingViewModel(),
nowPlayingInteractor));
}
}
테스트에서는 클래스
TestNowPlayingActivityComponent mockNowPlayingActivityComponent = DaggerTestNowPlayingActivityComponent.builder()
.testApplicationComponent((TestApplicationComponent) mvpExampleApplication.getComponent())
.testNowPlayingActivityModule(new TestNowPlayingActivityModule(nowPlayingActivityModule))
.build();
mockNowPlayingActivityComponent.inject((NowPlayingActivity) activity);
mockNowPlayingActivityComponent.inject(NowPlayingActivityTest.this);
에스프레소 UI 테스트에서 자동 생성되고 사용되는 활동 모듈에 액세스하는 방법은 무엇입니까? 위의 "ServiceGateway"& "NowPlayingPresenter"와 같은 객체에 액세스하여 테스트에 활용하려고합니다. 모의, 스파이 또는 유휴 리소스. 위의 예에서 내 유휴 자원은 각 개별 테스트 중에 에스프레소에 전달하는 "NowPlayingPresenter"구체 구현입니다.
당신이 내 솔루션 [여기] (HTTPS 검사 수행 할 방법을 결정하고 있으면 경우 모의을 제공 : /을 /stackoverflow.com/a/45545442/8326724) –