美文网首页
单元测试入门

单元测试入门

作者: 慎独静思 | 来源:发表于2023-02-19 22:59 被阅读0次

    咱们平时改代码时经常会有牵一发而动全身全身的情况,改完之后比较慌,不知道会引起什么问题,怕有考虑不全的情况,摁下这个问题那个问题又起来了,怎么避免这种情况呢?
    考虑引入单元测试吧,它可以为我们的软件质量提供强有力的保证。

    我们在单元测试中经常用的库有JUnitMockitoRobolectricEspresso

    • 如果你的测试对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测试等。

    参考:

    1. Android单元测试只看这一篇就够了
    2. Android单元测试研究与实践
    3. 构建本地单元测试
    4. 测试应用的 Activity
    5. 测试应用的 Fragment
    6. mockito
    7. Robolectric
    8. JUnit

    相关文章

      网友评论

          本文标题:单元测试入门

          本文链接:https://www.haomeiwen.com/subject/wwvskdtx.html