用Robolectric编写Android单元测试

常用Api解释

创建待测试的Activity

LoginActivity loginActivity = Robolectric.buildActivity(LoginActivity.class).create().get();

以上代码用于创建一个待测试的LoginActivity,其中的create()会调用onCreate()方法。

用指定Intent创建Activity

有的Activity需要使用Intent传递的参数:

Intent intent = new Intent();
intent.putExtra("key", "value");
LoginActivity loginActivity = Robolectric.buildActivity(LoginActivity.class).withIntent(intent).create().get();

模拟用户的点击

loginButton = (Button) activity.findViewById(R.id.btn_login);
Robolectric.clickOn(loginButton);

使用clickOn需要在buildActivity后调用visible方法,否则会得到一个错误。

activity = Robolectric.buildActivity(LoginActivity.class).create().visible().get();

取得最近启动的Activity

假如测试登录界面,输入正确的用户名密码后,点击登录按钮,跳转到HomeActivity

@Test
public void should_goto_HomeActivity_when_login_with_valid_user() throws Exception {
    username.setText("valid_username");
    password.setText("valid_password");

    Robolectric.clickOn(loginButton);

    String nextStartedActivityClass = Robolectric.getShadowApplication().getNextStartedActivity().getClass().getName();
    assertEquals(HomeActivity.class.getClass(), nextStartedActivityClass);
}

类似的方法有:getNextStartedService()getNextStopedService()

取得最新的Toast消息

假如测试登录界面, 登录失败时,会使用Toast通知用户:

@Test
public void should_notify_when_login_failed() throws Exception {
    username.setText("invalid_user");
    password.setText("invalid_password");

    Robolectric.clickOn(loginButton);

    assertEquals("Login failed, please check and try again.", ShadowToast.getTextOfLatestToast());
}

如何查询更多Api?

在Eclipse中查看Robolectric.下的方法: 查看内置的Shadow*