Je me sens un peu à l'aise pour répondre à ma propre bounty question, mais ici il est...
J'ai cherché haut et bas sur le présent et ne peux pas croire il n'y a pas de réponse publié n'importe où. Je suis venu très près. Je peux certainement exécuter des tests qui couvrent les activités de maintenant, mais ma mise en œuvre semble avoir quelques problèmes de timing où les tests ne sont pas toujours transmettre de manière fiable. C'est le seul exemple que je connais que les tests à travers de multiples activités avec succès. J'espère que mon extraction et de préservation de l'anonymat de ne pas introduire des erreurs. C'est une approche simpliste de test où j'ai taper un nom d'utilisateur et mot de passe dans une activité de connexion, et d'observer un bon message de bienvenue est affiché sur un autre "bienvenue" activité:
package com.mycompany;
import android.app.*;
import android.content.*;
import android.test.*;
import android.test.suitebuilder.annotation.*;
import android.util.*;
import android.view.*;
import android.widget.*;
import static org.hamcrest.core.Is.*;
import static org.hamcrest.core.IsNull.*;
import static org.hamcrest.core.IsInstanceOf.instanceOf;
import static org.junit.Assert.*;
import static com.mycompany.R.id.*;
public class LoginTests extends InstrumentationTestCase {
@MediumTest
public void testAValidUserCanLogIn() {
Instrumentation instrumentation = getInstrumentation();
// Register we are interested in the authentication activiry...
Instrumentation.ActivityMonitor monitor = instrumentation.addMonitor(AuthenticateActivity.class.getName(), null, false);
// Start the authentication activity as the first activity...
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setClassName(instrumentation.getTargetContext(), AuthenticateActivity.class.getName());
instrumentation.startActivitySync(intent);
// Wait for it to start...
Activity currentActivity = getInstrumentation().waitForMonitorWithTimeout(monitor, 5);
assertThat(currentActivity, is(notNullValue()));
// Type into the username field...
View currentView = currentActivity.findViewById(username_field);
assertThat(currentView, is(notNullValue()));
assertThat(currentView, instanceOf(EditText.class));
TouchUtils.clickView(this, currentView);
instrumentation.sendStringSync("MyUsername");
// Type into the password field...
currentView = currentActivity.findViewById(password_field);
assertThat(currentView, is(notNullValue()));
assertThat(currentView, instanceOf(EditText.class));
TouchUtils.clickView(this, currentView);
instrumentation.sendStringSync("MyPassword");
// Register we are interested in the welcome activity...
// this has to be done before we do something that will send us to that
// activity...
instrumentation.removeMonitor(monitor);
monitor = instrumentation.addMonitor(WelcomeActivity.class.getName(), null, false);
// Click the login button...
currentView = currentActivity.findViewById(login_button;
assertThat(currentView, is(notNullValue()));
assertThat(currentView, instanceOf(Button.class));
TouchUtils.clickView(this, currentView);
// Wait for the welcome page to start...
currentActivity = getInstrumentation().waitForMonitorWithTimeout(monitor, 5);
assertThat(currentActivity, is(notNullValue()));
// Make sure we are logged in...
currentView = currentActivity.findViewById(welcome_message);
assertThat(currentView, is(notNullValue()));
assertThat(currentView, instanceOf(TextView.class));
assertThat(((TextView)currentView).getText().toString(), is("Welcome, MyUsername!"));
}
}
Ce code n'est évidemment pas très lisible. J'ai extrait une simple bibliothèque avec un anglais qui ressemble à de l'API si je peux juste dire des choses comme ceci:
type("myUsername").intoThe(username_field);
click(login_button);
Je l'ai testé à une profondeur d'environ 4 activités et je suis convaincu que l'approche fonctionne bien comme je l'ai dit, il semble y avoir occasionnellement un problème de timing, je n'ai pas complètement compris. Je suis toujours intéressé par de tout autres moyens de tester les différentes activités.