基本Activity 测试用例
  创建一个测试用例

  在对应要测试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);