创建一个测试用例
在对应要测试Activity的package路径下新建test包,
项目工程结构.png
在改test路径下新建一个FirstActivityTest类(类名+Test后缀)继承ActivityTestCase
public class FirstActivityTest extends ActivityInstrumentationTestCase2<FirstActivity> {
private FirstActivity mFirstActivity;
private TextView mFirstTestTextView;
public FirstActivityTest() {
super(FirstActivity.class);
}
}
构造函数是由测试用的Runner调用,用于初始化测试类的。
测试会在运行任何其它测试方法之前自动执行setUp(Runner调用)方法,可以对一些对象进行赋值
@Override
protected void setUp() throws Exception {
super.setUp();
mFirstActivity = getActivity();
mFirstTestTextView = (TextView) mFirstActivity.findViewById(R.id.first_test_textview);
}
增加一个测试前提检查想要测试的对象是否已经正确地初始化
public void testPreconditions() {
assertNotNull("mFirstTestActivity is null", mFirstActivity);
assertNotNull("mFirstTestText is null", mFirstTestTextView);
}
测试方法测试默认文本是否和 strings.xml 资源中定义的文本一样。
public void testFirstTestTextView_labelText() {
final String expected = mFirstActivity.getString(R.string.hello_world);
final String actual = mFirstTestTextView.getText().toString();
assertEquals("mFirstTestText contains wrong text", expected, actual);
}
manifest.xml中注册测试用例
<application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <uses-library android:name="android.test.runner" /><!-- 加入测试库 --> <activity android:name="com.speed.androidtest.FirstActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> <instrumentation android:name="android.test.InstrumentationTestRunner" android:label="Tests for com.speed.androidtest" android:targetPackage="com.speed.androidtest" /><!-- targetPackage 测试类的路径 --> |
运行测试用例
项目工程右键Run as ==>Android JUint Test,安装完成后会自动执行测试用例,testFirstTestTextView_labelText执行判断
test_success.png
修改main_activity.xml中的
<TextView
android:id="@+id/first_test_textview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="hello" />
执行结果
test_error.png
检测到textview中的文本和资源中定义的不一致
UI组件测试, Button 点击
setUp函数编写
@Override
protected void setUp() throws Exception {
super.setUp();
setActivityInitialTouchMode(true);
mSecondTestUIActivity = getActivity();
mClickMeButton = (Button) mSecondTestUIActivity.findViewById(R.id.second_test_ui_btn);
}
把touch mode设置为真可以防止在执行编写的测试方法时,人为的UI操作获取到控件的焦点(比如,一个按钮会触发它的点击监听器)。确保在调用getActivity()之前调用setActivityInitialTouchMode(true);