그건 힘든 것이군요. :). 여기서 문제는 응용 프로그램을 떠날 때 (Google 계정 선택 도구가 외부 응용 프로그램 인 경우) 에스프레소가 테스트를 종료한다는 것입니다. 계정 선택 도구는 외부 com.google.android.gms
패키지의 활동입니다. 일단 시작되면 테스트가 끝나고 대화 상자에서 아무 것도 찾을 수 없습니다.
당신은 가능한 테스트를 만드는 세 가지 가능한 솔루션이 있습니다
- 를 가짜 의도로 응용 프로그램에서 클래스 경로 대체 사용을; 또는
- 앱을 "테스트 가능성"고정; 또는
- 내가 클래스 경로 대체를 사용하는 방법을 보여 드리겠습니다 Dagger
같은 의존성 주입을 사용. 이 기술은 정말 간단합니다 : Intent 생성을 별도의 클래스 (예 : IntentsFactory
)로 분리하고 테스트 중에 해당 클래스를 재정의해야합니다.
이 공장 com.yourapp.factories.IntentsFactory
에 말과이 같은 것입니다 :
public class IntentsFactory {
public static Intent getAccountPickerIntent (Context context) {
return AccountPicker.newChooseAccountIntent(null, null, new String[]{GoogleAuthUtil.GOOGLE_ACCOUNT_TYPE}, true, null, null, null, null);
}
}
당신은 테스트 응용 프로그램에 생성해야합니다 같은 이름 및 방법 패키지 (가 com.yourapp.tests
라고),하지만 그건를 반환 다른 의도하는 조롱/하나의 더미 :
public class IntentsFactory {
public static Intent getAccountPickerIntent (Context context) {
return new Intent(context, MyDummyAccountPickerActivity.class);
}
}
당신의 테스트를 실행 할 때마다, 그들은, 즉, 클래스 경로에 테스트에서 IntentsFactory을 "가장 가까운"클래스를 사용합니다. 흐름을 다른 앱에 보내는 의도를 반환하는 대신 흐름이 프로젝트의 클래스로 이동하고 에스프레소는 테스트를 종료하지 않습니다.
여기서 유일한주의 사항은 MyDummyAccountPickerActivity
을 만들어야하며 프레임 워크 클래스에서 반환 한 결과와 비슷한 Bundle
을 반환해야한다는 것입니다.정상적으로 활동은 앱의 매니페스트에 존재 당신은 클래스 경로는 다음과 같은 명령 줄 대체 (이 this 및 this 링크를 체크 아웃)를 허용하도록 에뮬레이터 달빅 런타임을 지시해야합니다 :
adb shell setprop dalvik.vm.dexopt-flags v=n,o=v
adb shell stop installd
adb shell start installd
및 실행 너의 검사들.
나는 카메라를 테스트하기 위해 비슷한 문제가 있었다 그것은 철저하게
in Espresso forum을 논의 것
액티비티 라이프 사이클 메소드를 게시 할 수 있습니까? – Bolhoso
Bolhoso, onCreate 메소드에서 이것을 가지고있는 것 : 'Intent googlePicker = AccountPicker.newChooseAccountIntent (null, null, new String [] {GoogleAuthUtil.GOOGLE_ACCOUNT_TYPE}, true, null, null, null, null); startActivityForResult (googlePicker, Utils.PICK_ACCOUNT_REQUEST); ' 계정을 선택한 논리입니다. 다른 라이프 사이클 방법은 변경되지 않습니다. –