android自动化框架简要剖析(二):Instrumentation+junit.framework.TestCase

本文详细阐述了Android平台测试的主架构,包括Instrumentation和junit.framework.TestCase的应用,以及它们在单元测试、集成测试和应用整体测试中的角色。介绍了如何使用Android测试框架进行UI测试,以及如何测试不同组件如Activity、Service等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

android平台测试支撑主架构如下:

1、Instrumentation

java.lang.Object
↳ android.app.Instrumentation  (Android测试环境的核心,通过将主程序和测试程序运行在同一个进程来实现;允许测试用例访问程序的状态及运行时对象)

java.lang.Object
↳ android.app.Instrumentation
↳ android.test.InstrumentationTestRunner    (测试执行类,清单文件中必须配置;我们使用adb shell am instrument.....命令时,必须指定该类,或者自己编写的子类)

 

2、junit.framework.TestCase   (测试用例和用例集的组织结构,作为框架提供测试API)

 java.lang.Object

↳ junit.framework.Assert
↳ junit.framework.TestCase
↳ android.test.InstrumentationTestCase
↳ android.test.ActivityTestCase
↳ android.test.ActivityInstrumentationTestCase2<T extends android.app.Activity>    (
单元测试时,传入要被测试类;只有apk包时,通过Class.forName()函数获取第一个activity的类名,作为参数)

 

java.lang.Object
↳ junit.framework.Assert
↳ junit.framework.TestCase
↳ android.test.AndroidTestCase    (测试基类;不能使用Instrumentation框架。但这些类包含访问系统对象(如Context)的方法。使用Context,你可以浏览资源,文件,数据库等等。)

Interfaces:
android.test.PerformanceTestCase


Known Direct Subclasses:
AndroidTestCase,

InstrumentationTestCase,可以使用Instrumentation框架,用于测试Activity。使用Instrumentation,Android可 以向程序发送事件来自动进行UI测试,并可以精确控制Activity的启动,监测Activity生命周期的状态。

TestSuiteBuilder.FailedToCreateTests

Known Indirect Subclasses
ActivityInstrumentationTestCase<T extends Activity>,
ActivityInstrumentationTestCase2<T extends Activity>,
ActivityTestCase,
ActivityUnitTestCase<T extends Activity>,
ApplicationTestCase<T extends Application>,   测试整个应用程序的类。它允许你注入一个模拟的Context到应用程序中,在应用程序启动之前初始化测试参数,并在应用程序结束之后销毁之前检查应用程序。


LoaderTestCase,
ProviderTestCase<T extends ContentProvider>,
ProviderTestCase2<T extends ContentProvider>, 测试单个ContentProvider的类。因为它要求使用MockContentResolver,并注入一个IsolatedContext,因此Provider的测试是与OS孤立的。


ServiceTestCase<T extends Service>, 测试单个Service的类。你可以注入一个模拟的Context或模拟的Application(或者两者),或者让Android为你提供Context和MockApplication。


SingleLaunchActivityTestCase<T extends Activity>,
SyncBaseInstrumentation

 

 

转载于:https://www.cnblogs.com/zhitang2009/p/3423063.html

INSTRUMENTATION_STATUS: class=android.virtualdevice.cts.camera.VirtualCameraTest INSTRUMENTATION_STATUS: current=1 INSTRUMENTATION_STATUS: id=AndroidJUnitRunner INSTRUMENTATION_STATUS: numtests=1 INSTRUMENTATION_STATUS: stream= android.virtualdevice.cts.camera.VirtualCameraTest: INSTRUMENTATION_STATUS: test=initializationError INSTRUMENTATION_STATUS_CODE: 1 INSTRUMENTATION_STATUS: class=android.virtualdevice.cts.camera.VirtualCameraTest INSTRUMENTATION_STATUS: current=1 INSTRUMENTATION_STATUS: id=AndroidJUnitRunner INSTRUMENTATION_STATUS: numtests=1 INSTRUMENTATION_STATUS: stack=java.lang.RuntimeException: Failed loading specified test class 'android.virtualdevice.cts.camera.VirtualCameraTest' at androidx.test.internal.runner.DirectTestLoader.doCreateRunner(DirectTestLoader.java:50) at androidx.test.internal.runner.TestLoader.getRunnersFor(TestLoader.java:64) at androidx.test.internal.runner.TestRequestBuilder.build(TestRequestBuilder.java:842) at androidx.test.runner.AndroidJUnitRunner.buildRequest(AndroidJUnitRunner.java:663) at androidx.test.runner.AndroidJUnitRunner.onStart(AndroidJUnitRunner.java:437) at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:2600) Caused by: java.lang.ClassNotFoundException: android.virtualdevice.cts.camera.VirtualCameraTest at java.lang.Class.classForName(Native Method) at java.lang.Class.forName(Class.java:607) at androidx.test.internal.runner.DirectTestLoader.doCreateRunner(DirectTestLoader.java:44) ... 5 more Caused by: java.lang.ClassNotFoundException: android.virtualdevice.cts.camera.VirtualCameraTest ... 8 more INSTRUMENTATION_STATUS: stream= Error in initializationError(android.virtualdevice.cts.camera.VirtualCameraTest): java.lang.RuntimeException: Failed loading specified test class 'android.virtualdevice.cts.camera.VirtualCameraTest' at androidx.test.internal.runner.DirectTestLoader.doCreateRunner(Dire
03-15
java.lang.AssertionError: Failed to successfully run device tests for com.google.android.gts.location: Instrumentation run failed due to 'Process crashed.' at com.android.tradefed.testtype.junit4.BaseHostJUnit4Test.runDeviceTests(BaseHostJUnit4Test.java:733) at com.android.tradefed.testtype.junit4.BaseHostJUnit4Test.runDeviceTests(BaseHostJUnit4Test.java:486) at com.google.android.gts.location.locationhost.LocationHostTest.runTest(LocationHostTest.java:103) at com.google.android.gts.location.locationhost.LocationHostTest.testGnssSatelliteBlocklist(LocationHostTest.java:90) at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) at java.base/java.lang.reflect.Method.invoke(Method.java:580) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:61) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26) at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27) at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306) at org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100) at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103) at com.android.tradefed.testtype.DeviceJUnit4ClassRunner.runChild(DeviceJUnit4ClassRunner.java:111) at com.android.tradefed.testtype.DeviceJUnit4ClassRunner.runChild(DeviceJUnit4ClassRunner.java:63) at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293) at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306) at org.junit.runners.ParentRunner.run(ParentRunner.java:413) at com.android.tradefed.testtype.DeviceJUnit4ClassRunner.run(DeviceJUnit4ClassRunner.java:147) at com.android.tradefed.testtype.junit4.ExceptionThrowingRunnerWrapper.run(ExceptionThrowingRunnerWrapper.java:43) at org.junit.runner.JUnitCore.run(JUnitCore.java:137) at com.android.tradefed.testtype.HostTest.runJUnit4Tests(HostTest.java:765) at com.android.tradefed.testtype.HostTest.runTestClasses(HostTest.java:645) at com.android.tradefed.testtype.HostTest.run(HostTest.java:593) at com.android.compatibility.common.tradefed.testtype.JarHostTest.run(JarHostTest.java:56) at com.android.tradefed.testtype.suite.GranularRetriableTestWrapper.intraModuleRun(GranularRetriableTestWrapper.java:386) at com.android.tradefed.testtype.suite.GranularRetriableTestWrapper.run(GranularRetriableTestWrapper.java:283) at com.android.tradefed.testtype.suite.ModuleDefinition.run(ModuleDefinition.java:626) at com.android.tradefed.testtype.suite.ITestSuite.runSingleModule(ITestSuite.java:1289) at com.android.tradefed.testtype.suite.ITestSuite.run(ITestSuite.java:1056) at com.android.tradefed.invoker.InvocationExecution.runTest(InvocationExecution.java:1457) at com.android.tradefed.invoker.InvocationExecution.runTests(InvocationExecution.java:1232) at com.android.tradefed.invoker.TestInvocation.prepareAndRun(TestInvocation.java:644) at com.android.tradefed.invoker.TestInvocation.performInvocation(TestInvocation.java:291) at com.android.tradefed.invoker.TestInvocation.invoke(TestInvocation.java:1437) at com.android.tradefed.command.CommandScheduler$InvocationThread.run(CommandScheduler.java:692)
03-27
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值