Android 测试(Unit Test & Instrument Test)

1. 测试目录

Android Studio 中的典型项目包含两个用于放置测试的目录。

androidTest 目录应包含在真实或虚拟设备上运行的测试。此类测试包括集成测试、端到端测试,以及仅靠 JVM 无法完成应用功能验证的其他测试。
test 目录应包含在本地计算机上运行的测试,如单元测试。

2. 测试金字塔的级别
小型测试(Unit tests)占 70%,中型测试(Integration tests)占 20%,大型测试(UI tests)占 10%

3. 创建本地单元测试类
JUnit 是最受欢迎且应用最广泛的 Java 单元测试框架

一般情况app/build.gradle自动添加

dependencies {
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test.ext:junit:1.1.2'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'

}

测试目录下已经生成如下文件, 我们可以根据需要创建test case

public class ExampleUnitTest {
    @Test
    public void addition_isCorrect() throws Exception {
        assertEquals(4, 2 + 2);
    }
}
<
&lt;think&gt; 嗯,用户的问题是关于AndroidTest安装到手机后如何进行调用。我需要结合用户提供的引用信息来回答这个问题。 用户引用了三个资料,第一条是关于Qt调用Android原生控件安装APK,第二条是Application.mk的配置,第三条是APP调用HAL层接口的实现。这些引用虽然用户的问题没有直接关系,但展示了Android开发中不同层次的调用机制。用户真正的需求是了解Android测试包安装后的调用方法。 回忆Android测试相关知识,AndroidTest通常是指Instrumentation测试,需要特定的命令或工具触发。用户可能刚接触Android测试,对测试执行流程不熟悉。ta可能遇到的问题是:测试APK安装后找不到执行入口,或者不清楚如何启动测试。 从技术角度看,这个问题需要分三部分解答:首先是测试类型区分(单元测试/UI测试),然后是执行方式(命令/Gradle/IDE),最后是结果查看。特别要注意Instrumentation测试需要指定测试运行器测试包名,这在adb命令中是关键参数。 用户提供的引用[3]提到HAL层接口调用,虽然不直接相关,但暗示ta可能涉及底层硬件测试。因此在回答中可以补充说明:如果需要测试硬件相关功能,可参考HAL层调用的设计模式,但当前问题聚焦测试执行层面。 考虑到用户操作便利性,应该优先推荐Android Studio的图形化操作,其次才是adb命令方案。对于持续集成场景,则需要强调Gradle命令的重要性。结果查看部分要提醒Logcat的使用,因为测试失败时日志分析很重要。 &lt;/think&gt; 在Android开发中,`AndroidTest` 测试模块安装到手机后,主要通过以下方式调用执行: --- ### 一、测试类型区分 1. **Instrumentation测试(集成/UI测试)** 位于 `androidTest` 目录,依赖设备环境,需安装独立的测试APK(如 `app-debug-androidTest.apk`)。 2. **本地单元测试Unit Test)** 位于 `test` 目录,直接在开发机器执行,无需安装到手机。 --- ### 二、AndroidTest 调用方式 #### ▶ **方式1:通过 Android Studio 执行** 1. 在 `androidTest` 目录右键点击测试类/方法 2. 选择 `Run &#39;TestName&#39;` ![](https://example.com/android-studio-run-test.png) *(图示:Android Studio执行按钮)* - 自动安装 **主APK + 测试APK** - 执行测试并输出报告 #### ▶ **方式2:通过 `adb` 命令执行** ```bash # 安装测试APK (需先安装主APK) adb install app-debug-androidTest.apk # 执行指定测试类 adb shell am instrument -w \ -e class com.example.MyTestClass \ com.example.test/androidx.test.runner.AndroidJUnitRunner # 执行单个测试方法 adb shell am instrument -w \ -e class com.example.MyTestClass#testMethodName \ com.example.test/androidx.test.runner.AndroidJUnitRunner ``` #### ▶ **方式3:通过 Gradle 命令** ```bash # 执行全部测试 ./gradlew connectedAndroidTest # 执行特定模块的测试 ./gradlew :app:connectedAndroidTest ``` --- ### 三、关键参数说明 | 参数 | 作用 | |---------------------------|----------------------------------------------------------------------| | `androidx.test.runner.AndroidJUnitRunner` | 测试运行器,负责调度测试用例执行 | | `-e class &lt;测试类/方法&gt;` | 指定要运行的测试类或方法(格式:`完整类路径#方法名`) | | `-w` | 等待测试完成 | | `com.example.test` | 测试APK的包名(通常为`主包名 + .test`) | --- ### 四、结果查看 1. **控制台输出**:直接显示测试通过/失败状态 2. **Logcat日志**:过滤 `AndroidJUnitRunner` 标签查看详细过程 3. **HTML报告**:生成路径 `app/build/reports/androidTests/connected/index.html` --- ### 五、常见问题解决 1. **测试APK未安装** ```bash # 检查测试APK是否安装 adb shell pm list packages | grep &quot;.test&quot; ``` 2. **类找不到错误** 确认 `AndroidManifest.xml` 已声明测试运行器: ```xml &lt;instrumentation android:name=&quot;androidx.test.runner.AndroidJUnitRunner&quot; android:targetPackage=&quot;com.example&quot;/&gt; ``` 3. **权限问题** 在测试代码中添加必要的运行时权限处理逻辑。 --- ### 六、底层机制(参考引用[3]设计) 当测试代码涉及硬件操作时,可通过JNI调用HAL层接口(需提前封装): ```java // 示例:在Instrumentation测试中调用原生方法 public class SensorTest { static { System.loadLibrary(&quot;hal_jni&quot;); // 加载JNI库 } public native int readSensorData(); // HAL层接口 @Test public void testSensor() { int data = readSensorData(); // 调用HAL assertTrue(data &gt; 0); } } ``` 需确保JNI库已编译到测试APK中(参考引用[2]的ABI配置)[^3]。 ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值