Android 7.0源码环境单元测试

“单元测试”测试模块内部方法或类。“集成测试”测试模块间的调用。
Android官方测试文档:https://developer.android.com/training/testing/index.html
Android studio 测试文档:https://developer.android.com/studio/test
Android单元测试内容:
有复杂逻辑的类:
1、算法类。如字符串转数字、时间转换等。
2、协议类,各种通讯协议。网络、串口等。在后台或外部协议模块未完成前根据协议,编写桩模块进行测试。
3、UI控制类,依赖用户操作和外部数据来显示不同的UI状态。通常需要模拟用户输入数据和外部数据桩模块。(参考/package/app/TV/tests)
1.JUnit
2.Mock
1、不依赖android环境的单元测试对于系统代码依赖较强的代码无法测试,因为JUnit需要在IDE环境运行,运行之前需要保证代码编译无报错。对于此类型测试,可以直接使用instrumentation代替。
2、对于依赖android 环境的测试则可以使用adb instrumentation command或IDE测试。
命令行测试见:
https://developer.android.com/studio/test/command-line
Android仪器测试:
Instrumentation Test:
环境:Android7.0
1、建立测试类

package your.package.name.util;
import android.test.AndroidTestCase;
import android.util.Log;
/*继承AndroidTestCase,并实现setUp()和tearDown()方法*/
public class UtilTest extends AndroidTestCase{
	private final String TAG = "UtilTest";
	/**
	* Called before run() is called.
	* 可以做测试前的初始化动作。
	* 注:每个测试方法运行前都会前执行SetUp(),测试方法执行完后,又会执行tearDown()
	*/
	@Override
	public void setUp() throws Exception {
		super.setUp();
		Log.d(TAG,"setUp:");
	}
	/*被测试方法名要以test开头*/
	public void testCase1() throws Exception {
		Log.d(TAG, "testCase1:");
		assertEquals(0,0);
	}
	public void testCase2() throws Exception {
		Log.d(TAG, "testCase1:");
		assertEquals(0,0);
	}
	/**
	* Called after run() is called, even if run() threw an exception, but
	* not if setUp() threw an execption.
	*/
	@Override
	public void tearDown() throws Exception {
		super.tearDown();
		Log.d(TAG,"tearDown");
	}
}

2、编写AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.hisilicon.tvsetting.tests" >
	<uses-sdk android:targetSdkVersion="23" android:minSdkVersion="21" />
	
	<instrumentation
	android:name="android.support.test.runner.AndroidJUnitRunner"
	android:label="HiTvSetting Unit Tests"
	android:targetPackage="your.package.name" />
	
	<application android:label="HiTvSettingTest" >
		<uses-library android:name="android.test.runner" />
	</application>
</manifest>

添加instrumentation标签,targetPackage指定被测试包名。
添加库依赖
3、编写Android.mk

LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := tests
# Include all test java files.
LOCAL_SRC_FILES := $(call all-java-files-under, src)
# 添加测试库依赖
LOCAL_STATIC_JAVA_LIBRARIES := \
android-support-test
# 签名要与被测试应用一致,这里以系统签名为例。
LOCAL_CERTIFICATE := platform
LOCAL_PACKAGE_NAME := YourAppTests
# 被测试应用名称
LOCAL_INSTRUMENTATION_FOR := YourApp
LOCAL_SDK_VERSION := current
LOCAL_MIN_SDK_VERSION := 23 # M
include $(BUILD_PACKAGE)

4、运行测试方法
使用 adb shell am instrument 命令,使用方法见https://developer.android.com/studio/test/command-line
运行全部测试方法:

adb shell am instrument -w your.package.name.tests/android.support.test.runner.AndroidJUnitRunner

运行指定类,以UtilTest类为例:

adb shell am instrument -w -e class 'your.package.name.tests.UtilTest' your.package.name.tests/android.support.test.runner.AndroidJUnitRunner

运行执行类指定方法,以UtilTest类testCase1()为例:

adb shell am instrument -w -e class 'your.package.name.tests.UtilTest#testCase1' your.package.name.tests/android.support.test.runner.AndroidJUnitRunner

命令说明:
-w 表示等待测试运行完成,参数:<测试软件包名>/<插桩测试类名,通常是AndroidJUnitRunner>
-e 表示添加参数,如指定class

上一篇:关于linux中执行脚本或程序时指定的路径


下一篇:基于textureview编写opengl程序