Android程序测试

一、建立测试环境

安装了Android Developer Tools (ADT) 插件的Eclipse将为你创建,构建,以及运行Android程序提供一个基于图形界面的集成开发环境。Eclipse的一项方便的特性是可以自动为你的Android应用项目创建一个对应的测试项目。

1、建立一个Android工程(如下,名为AndroidNormalProject)、或者导入已经存在的工程。

技术分享

2、生成一个该工程对应的测试工程

在工程上右击-->Android Tools-->New Test Project...

技术分享

二、创建与执行测试用例

Activity都是通过结构化的方式编写的。请务必把你的测试代码放在一个单独的包内,从而与其它的正在测试的代码分开。

按照惯例,你的测试包的名称应该遵循与应用包名相同的命名方式,在应用包名后接“.tests”。在你创建的测试包,为你的测试用例添加Java类。按照惯例,你的测试用例名称也应遵循你要测试的Java或Android的类相同的名称,但后缀为“Test”。

1、新建测试包 和对应的测试用例名称(工程包名.test)

工程包:

技术分享

测试包:

技术分享

2、建立测试夹具(Fixture)

测试夹具由对象必须由一个或多个正在运行测试来初始化。要建立测试夹具,你可以在你的测试中重写setUp()和tearDown()方法。测试会在运行任何其它测试方法之前自动调用setUp()方法。你可以用这些方法来保持代码的测试初始化和清理是分开。

import android.test.ActivityInstrumentationTestCase2;
import android.widget.TextView;

import com.example.androidnormalproject.MainActivity;
import com.example.androidnormalproject.R;

public class MainActivityTest extends ActivityInstrumentationTestCase2<MainActivity>{

	private MainActivity mMainActivity;
	private TextView mTextView;

	public MainActivityTest() {
		super(MainActivity.class);
	}
	
	@Override
	protected void setUp() throws Exception {
		super.setUp();
		mMainActivity = getActivity();
		if(mMainActivity == null) return;
		mTextView = (TextView) mMainActivity.findViewById(R.id.helloword_text);
	}
	
	@Override
	protected void tearDown() throws Exception {
		super.tearDown();
		
	}
	
}

3、添加一个测试前提

在正式测试之前,我们先保证测试的对象正确的实例化和初始化,添加一个testPreconditions()方法

	public void testPreconditions() {
	    assertNotNull("mMainActivity is null", mMainActivity);
	    assertNotNull("mTextView is null", mTextView);
	}
4、添加一个测试方法验证Activity

	public void testMainActivityTextView_helloword(){
		final String expected = mMainActivity.getString(R.string.hello_world);
		final String actual = mTextView.getText().toString();
		assertEquals(expected, actual);
	}

5、运行测试

Run As --> Android Junit Test

技术分享

三、测试UI组件

1、测试一个Button的布局

	/**
	 * 测试Button的布局
	 */
	public void testMainActivityButton_layout(){
		final View decorView = mMainActivity.getWindow().getDecorView();
		//是否在屏幕内
	    ViewAsserts.assertOnScreen(decorView, mButton);

	    final ViewGroup.LayoutParams layoutParams =
	            mButton.getLayoutParams();
	    assertNotNull(layoutParams);
	    //测试布局属性
	    assertEquals(layoutParams.width, WindowManager.LayoutParams.MATCH_PARENT);
	    assertEquals(layoutParams.height, WindowManager.LayoutParams.WRAP_CONTENT);
	}
2、验证按钮的行为

	/**
	 * 测试按钮点击事件
	 */
	public void testMainActivityButton_onClick(){
		String expectedInfoText = mMainActivity.getString(R.string.button_text);
	    TouchUtils.clickView(this, mButton);
	    assertTrue(View.VISIBLE == mButton.getVisibility());
	    assertEquals(expectedInfoText, mButton.getText());
	}
注意:上面的TouchUitl是将事件安全的从其他线程发送到UI线程,不应该将该方法用于UI线程中使用。

3、应用测试的注释

@SmallTest

标志着一个测试运行的小型测试的一部分

@MediumTest

标志着一个测试运行的中等测试的一部分

@LargeTest

标志着一个测试运行的大型测试的一部分

转载请说明出处:http://blog.csdn.net/dawanganban

总结:用上面简单介绍的测试方法就可以建立适合我们的单元测试(测试代码中可能性最小的代码块)和功能测试(验证单个应用组件是否与使用者期望的那样与其它组件协同工作)

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。