单元测试入门
2023-02-19 本文已影响0人
慎独静思
咱们平时改代码时经常会有牵一发而动全身全身的情况,改完之后比较慌,不知道会引起什么问题,怕有考虑不全的情况,摁下这个问题那个问题又起来了,怎么避免这种情况呢?
考虑引入单元测试吧,它可以为我们的软件质量提供强有力的保证。
我们在单元测试中经常用的库有JUnit,Mockito,Robolectric,Espresso。
- 如果你的测试对Android框架有依赖,最好使用Robolectric;
- 如果你的测试对Android框架依赖性极小,或如果测试仅取决于你自己的对象,可以使用Mockito等;
测试金字塔包含三类测试:小型测试,中型测试,大型测试。
- 小型测试是指单元测试,用于验证应用的行为,一次验证一个类。
- 中型测试是指集成测试,用户验证模块内堆栈之间的互动或相关模块之间的互动。
- 大型测试是指端到端测试,用于验证跨越了应用的多个模块的用户操作流程。
通常建议各类测试占比为:小型测试占 70%,中型测试占20%,大型测试占10%。
我们新建一个工程之后通常包含两个测试目录,androidTest和test目录。
- test目标主要包含运行本地的测试内容,比如单元测试;
- androidTest目录包括运行在真机或虚拟设备上的测试内容,例如集成测试,端到端测试以及其他一些只依赖JVM无法完成的测试。
以下内容建议使用单元测试:ViewModels或Presenters,数据层尤其是repositories,工具类等。
单元测试中要覆盖正常的case和边界case,比如网络错误,除以0等情况。
不要用单元测试验证不属于你的代码,比如framework或库的正确行为。
activities,fragments或services等系统入口,因为没有太多逻辑,所以不适合用单元测试验证。
屏幕UI测试包含用户交互行为,如点击,输入等,建议每个界面一个测试类。
用户交互测试验证用户界面跳转流程。
添加测试依赖:
dependencies {
// Required -- JUnit 4 framework
testImplementation "junit:junit:$jUnitVersion"
// Optional -- Robolectric environment
testImplementation "androidx.test:core:$androidXTestVersion"
// Optional -- Mockito framework
testImplementation "org.mockito:mockito-core:$mockitoVersion"
// Optional -- mockito-kotlin
testImplementation "org.mockito.kotlin:mockito-kotlin:$mockitoKotlinVersion"
// Optional -- Mockk framework
testImplementation "io.mockk:mockk:$mockkVersion"
}
testImplementation为本地测试添加依赖, androidTestImplementation为仪器测试添加依赖。
除了这些测试还包括性能测试,monkey测试等。
参考: