【发布时间】:2014-06-06 05:23:25
【问题描述】:
我的 Android 应用程序上的 MainActivity 会检查用户是否已登录(存储在 SharedPreferences 中)以及是否没有将用户带到 LoginActivity。我正在尝试使用以下代码对此进行测试
public class MainActivityTest extends ActivityInstrumentationTestCase2<MainActivity> {
private static final int TIME_OUT = 5000; /* miliseconds */
private MainActivity mMainActivity;
private Instrumentation mInstrumentation;
private SharedPreferences mLoginPrefs;
public MainActivityTest() {
super(MainActivity.class);
}
protected void setUp() throws Exception {
super.setUp();
setActivityInitialTouchMode(false);
mMainActivity = getActivity();
mInstrumentation = getInstrumentation();
mLoginPrefs = mInstrumentation.getTargetContext().getSharedPreferences(LoginActivity.PREFS_NAME, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = mLoginPrefs.edit();
// User is not logged in, so it should be redirect to LoginActivity
editor.putBoolean("logged_in", false);
editor.commit();
}
//...
public void testC_OpenLoginActivityIfUserIsNotLoggedIn() {
ActivityMonitor monitor = mInstrumentation.addMonitor(LoginActivity.class.getName(), null, false);
Activity nextActivity = mInstrumentation.waitForMonitorWithTimeout(monitor, TIME_OUT);
assertNotNull(nextActivity);
nextActivity.finish();
SharedPreferences.Editor editor = mLoginPrefs.edit();
// Login the user so we can continue the tests
editor.putBoolean("logged_in", true);
editor.commit();
}
但这不起作用,LoginActivity 打开但 waitForMonitorWithTimeout 永远不会返回,所以我卡在 LoginActivity 上(我需要回到 MainActivity 进行其他测试)。
类似于SO Question 的代码适用于按钮点击,但任何点击都不会加载此活动,所以我想可能没有时间让监视器工作。
我只需要一种方法来获取实际的 Activity,这样我就可以进行断言并使其完成以继续我的测试。
还有一件事:如果可能的话,我更喜欢不使用 Robotium 的方法。
【问题讨论】:
标签: java android automated-tests junit3