Espresso comment attendre un certain temps(1 heure)?
Dans mon cas de test que j'enregistre pendant 1 heure, en robotium solo.sommeil(600000) d'avoir fait de mon travail, mais À expresso je suis confus avec IdlingResource concept. J'ai pour démarrer l'enregistrement et attendre pendant un certain temps(en fonction du type de test) 15 min, 60mins etc.
Code équivalent en robotium
solo.clickOnView(solo.getView("start_record"));
solo.sleep(duration * 60 * 1000);
solo.clickOnView(solo.getView("stop_record"));
J'ai essayé de l'utiliser comme ceci dans l'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());
}
}
La marche au ralenti des ressources
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;
}
}
Exception:
android.support.test.espresso.IdlingResourceTimeoutException: Wait for [com.adbs.recorder.IntentServiceIdlingResource] to become idle timed out
OriginalL'auteur Shivaraj Patil | 2015-05-10
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin d'un
IdlingResource
avec unisIdleNow()
qui renvoietrue
seulement si le montant spécifique de temps a passé. Pour y parvenir, enregistrer l'heure de début et de le comparer avec le temps actuel:Créer et d'enregistrer cette marche au ralenti des ressources dans votre test:
Vous avez besoin de la
setMasterPolicyTimeout
etsetIdlingResourceTimeout
appels assurez-vous que l'Espresso n'est pas la fin de l'épreuve pour cause de temps.Exemple complet: https://github.com/chiuki/espresso-samples/tree/master/idling-resource-elapsed-time
qu'est-ce que l'utilisation de
registerIdleTransitionCallback
cette méthode et comment l'utiliser ?OriginalL'auteur chiuki
La valeur par défaut délai d'expiration de l'Espresso va attendre que toutes les ressources sont en veille est d'une minute.
Vous pouvez changer cela en utilisant le
IdlingPolicies
classe pour définir explicitement un délai d'attente:IdlingPolicies.setMasterPolicyTimeout(1, TimeUnit.HOURS);
pour éviterAppNotIdleException
.S'il vous plaît, où est le IdlingPolicies ensemble?
vous pouvez le faire n'importe où - dans chaque test ou dans la méthode de configuration.
OriginalL'auteur ataulm
Je test sur mon projet, Il fonctionne.
Juste le programme d'installation avant d'inscrire la marche au ralenti des ressources.
veuillez vérifier:
https://github.com/googlesamples/android-testing/tree/master/ui/espresso/IdlingResourceSample
et
https://developer.android.com/reference/android/support/test/espresso/IdlingPolicies
Les mises à jour de la IdlingPolicy utilisé dans UiController.loopUntil pour détecter AppNotIdleExceptions.
OriginalL'auteur Norman