ActivityInstrumentationTestCase2 用来测试单个的Activity,被测试的Activity可以使用InstrumentationTestCase.launchActivity 来启动,然后你能够直接操作被测试的Activity。
ActivityInstrumentationTestCase2 也支持:
- 可以在UI线程中运行测试方法.
- 可以注入Intent对象到被测试的Activity中
ActivityInstrumentationTestCase2 取代之前的ActivityInstrumentationTestCase ,新的测试应该使用ActivityInstrumentationTestCase2作为基类。

Focus2ActivityTest 的代码如下,用于测试Android ApiDemos示例解析(116):Views->Focus->2. Horizontal
public class Focus2ActivityTest
extends ActivityInstrumentationTestCase2<Focus2> {
private Button mLeftButton;
private Button mCenterButton;
private Button mRightButton;
public Focus2ActivityTest() {
super("com.example.android.apis", Focus2.class);
}
@Override
protected void setUp() throws Exception {
super.setUp();
final Focus2 a = getActivity();
mLeftButton = (Button) a.findViewById(R.id.leftButton);
mCenterButton = (Button) a.findViewById(R.id.centerButton);
mRightButton = (Button) a.findViewById(R.id.rightButton);
}
@MediumTest
public void testPreconditions() {
assertTrue("center button should be right of left button",
mLeftButton.getRight() < mCenterButton.getLeft());
assertTrue("right button should be right of center button",
mCenterButton.getRight() < mRightButton.getLeft());
assertTrue("left button should be focused", mLeftButton.isFocused());
}
@MediumTest
public void testGoingRightFromLeftButtonJumpsOverCenterToRight() {
sendKeys(KeyEvent.KEYCODE_DPAD_RIGHT);
assertTrue("right button should be focused", mRightButton.isFocused());
}
@MediumTest
public void testGoingLeftFromRightButtonGoesToCenter() {
getActivity().runOnUiThread(new Runnable() {
public void run() {
mRightButton.requestFocus();
}
});
// wait for the request to go through
getInstrumentation().waitForIdleSync();
assertTrue(mRightButton.isFocused());
sendKeys(KeyEvent.KEYCODE_DPAD_LEFT);
assertTrue("center button should be focused",
mCenterButton.isFocused());
}
}
setUp 中初始化mLeftButton,mCenterButton和mRightButton,调用每个测试方法之前,setUp 都会被调用。
testPreconditions 通常为第一个测试方法,用来检测后续的测试环境是否符合条件。
testGoingRightFromLeftButtonJumpsOverCenterToRight 中调用sendKeys 可以模拟按键消息。
testGoingLeftFromRightButtonGoesToCenter 中 ,使用runOnUiThread 来为mRightButton 请求focus ,使用runOnUiThread 的原因是因为本测试方法不在UI线程中运行。 getInstrumentation 可以取得Instrumentation对象,有了Instrumentation 对象就可以对Activity进行大部分的操作,waitForIdleSync() 等待application 回到idle 状态,之后就可以检测mRightButton 是否获得了焦点。