Мені трохи незручно відповідати на власне запитання про щедрості, але ось воно ...
Я шукав високо і низько на цьому, і не можу повірити, що ніде немає опублікованої відповіді. Я підійшов дуже близько. Зараз я точно можу запускати тести, які охоплюють діяльність, але, схоже, у моїй реалізації є деякі проблеми з термінами, коли тести не завжди проходять надійно. Це єдиний приклад, який я знаю про те, що успішно тестуються різні дії. Сподіваємось, моє вилучення та анонімізація не призвело до помилок. Це спрощений тест, де я ввожу ім’я користувача та пароль для входу в систему, а потім спостерігаю, як на іншому заході привітання відображається належне привітальне повідомлення:
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();
Instrumentation.ActivityMonitor monitor = instrumentation.addMonitor(AuthenticateActivity.class.getName(), null, false);
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setClassName(instrumentation.getTargetContext(), AuthenticateActivity.class.getName());
instrumentation.startActivitySync(intent);
Activity currentActivity = getInstrumentation().waitForMonitorWithTimeout(monitor, 5);
assertThat(currentActivity, is(notNullValue()));
View currentView = currentActivity.findViewById(username_field);
assertThat(currentView, is(notNullValue()));
assertThat(currentView, instanceOf(EditText.class));
TouchUtils.clickView(this, currentView);
instrumentation.sendStringSync("MyUsername");
currentView = currentActivity.findViewById(password_field);
assertThat(currentView, is(notNullValue()));
assertThat(currentView, instanceOf(EditText.class));
TouchUtils.clickView(this, currentView);
instrumentation.sendStringSync("MyPassword");
instrumentation.removeMonitor(monitor);
monitor = instrumentation.addMonitor(WelcomeActivity.class.getName(), null, false);
currentView = currentActivity.findViewById(login_button;
assertThat(currentView, is(notNullValue()));
assertThat(currentView, instanceOf(Button.class));
TouchUtils.clickView(this, currentView);
currentActivity = getInstrumentation().waitForMonitorWithTimeout(monitor, 5);
assertThat(currentActivity, is(notNullValue()));
currentView = currentActivity.findViewById(welcome_message);
assertThat(currentView, is(notNullValue()));
assertThat(currentView, instanceOf(TextView.class));
assertThat(((TextView)currentView).getText().toString(), is("Welcome, MyUsername!"));
}
}
Цей код, очевидно, не дуже читабельний. Я насправді витягнув його у просту бібліотеку з англомовним API, тому я можу просто сказати такі речі:
type("myUsername").intoThe(username_field);
click(login_button);
Я протестував приблизно до чотирьох видів діяльності і переконуюсь, що підхід працює, хоча, як я вже сказав, іноді виникає проблема з часом, яку я не до кінця зрозумів. Я все ще зацікавлений почути будь-які інші способи тестування в різних видах діяльності.