Espresso, wie Sie für einige Zeit warten(1 Stunde)?
In meinem test-Fall, ich habe Aufnahmen für 1 Stunde, in robotium solo.sleep(600000) getan hatte, meine Arbeit, aber In der espresso-ich bin verwirrt mit IdlingResource Konzept. Ich habe um die Aufnahme zu starten, und warten Sie einige Zeit(abhängig von der Art der Prüfung) 15 min, 60 min etc.
Entsprechende code in robotium
solo.clickOnView(solo.getView("start_record"));
solo.sleep(duration * 60 * 1000);
solo.clickOnView(solo.getView("stop_record"));
Habe ich versucht, es zu benutzen, wie dies in espresso
@RunWith(AndroidJUnit4.class)
@SmallTest
public class AaEspressoTest {
private static final String LAUNCHER_ACTIVITY_FULL_CLASSNAME = "com.absd.rec.RecorderActivity";
private static Class<?> launcherActivityClass;
private Solo solo;
private static CoreRecordingTest skyroTestRunner;
private static Class<? extends Activity> activityClass;
static {
try {
activityClass = (Class<? extends Activity>) Class.forName(LAUNCHER_ACTIVITY_FULL_CLASSNAME);
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
}
}
@Rule
public final ActivityTestRule<?> activityRule
= new ActivityTestRule<>(activityClass);
private IntentServiceIdlingResource idlingResource;
@Before
public void registerIntentServiceIdlingResource() {
Instrumentation instrumentation = InstrumentationRegistry.getInstrumentation();
idlingResource = new IntentServiceIdlingResource(instrumentation.getTargetContext());
Espresso.registerIdlingResources(idlingResource);
}
@After
public void unregisterIntentServiceIdlingResource() {
Espresso.unregisterIdlingResources(idlingResource);
}
@Test
public void testHello() throws Exception {
onView(withId(AaEspressoTest.getId("recorderpage_record"))).perform(click());
registerIntentServiceIdlingResource();
onView(withId(AaEspressoTest.getId("recorderpage_stop"))).perform(click());
}
}
Leerlauf Ressource
public class IntentServiceIdlingResource implements IdlingResource {
private final Context context;
private ResourceCallback resourceCallback;
public static boolean status = false;
public IntentServiceIdlingResource(Context context) {
this.context = context;
}
@Override
public String getName() {
return IntentServiceIdlingResource.class.getName();
}
@Override
public boolean isIdleNow() {
return getTimer();
}
@Override
public void registerIdleTransitionCallback(ResourceCallback resourceCallback) {
this.resourceCallback = resourceCallback;
}
private static boolean getTimer() {
new CountDownTimer(5000, 1000) {
@Override
public void onTick(long millisUntilFinished) {
//Do Nothing
status = false;
}
@Override
public void onFinish() {
status = true;
}
};
return status;
}
}
Ausnahme:
android.support.test.espresso.IdlingResourceTimeoutException: Wait for [com.adbs.recorder.IntentServiceIdlingResource] to become idle timed out
InformationsquelleAutor der Frage Shivaraj Patil | 2015-05-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Benötigen Sie eine
IdlingResource
mit einemisIdleNow()
zurückgibttrue
nur, wenn die bestimmte Menge an Zeit vergangen ist. Um das zu erreichen, speichern Sie die start-Zeit und Vergleiche Sie mit der aktuellen Zeit:Erstellen und registrieren Sie diese im Leerlauf Ressource im test:
Müssen Sie die
setMasterPolicyTimeout
undsetIdlingResourceTimeout
Aufrufe sicherstellen, dass Espresso nicht die Prüfung abgebrochen wegen time out.Vollständigen Beispiel: https://github.com/chiuki/espresso-samples/tree/master/idling-resource-elapsed-time
InformationsquelleAutor der Antwort chiuki
Den Standard-timeout -, Espresso-warten für alle registrierten Ressourcen werden Leerlauf beträgt eine minute.
Können Sie dies ändern mit der
IdlingPolicies
- Klasse, um eine explizite timeout:InformationsquelleAutor der Antwort ataulm
Teste ich an meinem Projekt, funktioniert Es.
Nur setup, bevor Sie sich registrieren Leerlauf Ressourcen.
bitte überprüfen Sie:
https://github.com/googlesamples/android-testing/tree/master/ui/espresso/IdlingResourceSample
und
https://developer.android.com/reference/android/support/test/espresso/IdlingPolicies
InformationsquelleAutor der Antwort Norman