Instrumentation

一般在开发Android程序的时候,需要写一个manifest文件在启动程序的时候就会先启动一个Application,然后在此Application运行过程中根据情况加载相应的Activity,而Activity是需要一个界面的。但是Instrumentation并不是这样的。你可以将Instrumentation理解为一种没有图形界面的,具有启动能力的,用于监控其他类(用TargetPackage声明)的工具类。任何想成为Instrumentation的类必须继承android.app.Instrumentation。

如何在Android中利用Instrumentation来进行测试?

在介绍具体的命令之前,我们先理解一下单元测试的层次。

一组单元测试可以被组织成若干个TestSuite。每个TestSuite包含若干TestCase(某个继承android.jar的junit.framework.TestCase的类)。每个TestCase又包含若干个Test(具体的test方法)。

(1)如果假设com.android.foo是你的测试代码的包的根。当执行以下命令时,会执行所有的TestCase的所有Test。测试的对象就是在Target Package中指定的包中的代码:

adb shell am instrument -wcom.android.foo/android.test.InstrumentationTestRunner

(2)如果你想运行一个TestSuite,首先继承android.jar的junit.framework.TestSuite类,实现一个TestSuite(比如叫com.android.foo.MyTestSuite),然后执行以下命令执行此TestSuite

adb shell am instrument -eclass com.android.foo.MyTestSuite -wcom.android.foo/android.test.InstrumentationTestRunner

其中的-e表示额外的参数,语法为-e [arg1] [value1] [arg2] [value2] …这里用到了class参数。

(3)如果仅仅想运行一个TestCase(比如叫com.android.foo.MyTestCase),则用以下命令:

adb shell am instrument -eclass com.android.foo.MyTestCase -wcom.android.foo/android.test.InstrumentationTestRunner

(4)如果仅仅想运行一个Test(比如就是上面MyTestCase的testFoo方法),很类似的,就这样写:

adb shell am instrument -eclass com.android.foo.MyTestCase#testFoo -wcom.android.foo/android.test.InstrumentationTestRunner

然后,所有的测试结果会输出到控制台,并会做一系列统计,如标记为E的是Error,标记为F的是Failure,Success的测试则会标记为一个点。这和JUnit的语义一致。如果希望断点调试你的测试,只需要直接在代码上加上断点,然后将运行命令参数的-e后边附加上debug true后运行即可。更加详细的内容可以看InstrumentationTestRunner的Java.doc。

 

你可能感兴趣的:(客户端测试(android))