• Android学习笔记 75. 单元测试


    Android学习笔记

    Android 开发者基础知识 (Java) —— Google Developers 培训团队

    第1单元 入门

    第3课 测试、调试和使用支持库

    75. 单元测试

    你会做什么
    • 在 SimpleCalc 应用程序中运行初始测试。
    • 向 SimpleCalc 应用程序添加更多测试。
    • 运行单元测试以查看结果。
    75.1 探索并运行CalculatorTest
    1. 探索源代码和CalculatorTest

      源集是项目中的代码集合,用于不同的构建目标或应用程序的其他“风格”。当 Android Studio 创建您的项目时,它会创建三个源集:

      • 主要集,用于您的应用程序的代码和资源。
      • 源集,用于您应用的(test)本地单元测试。源集显示(test)在包名称之后。
      • 源集(androidTest),用于 Android 检测测试。源集显示(androidTest)在包名称之后。

      Android 视图中的java文件夹按包名称列出了应用程序中的所有源集。在这种情况下(如下所示),应用程序代码在com.android.example.SimpleCalc源集中。测试代码位于源集中,test包名称后面的括号中显示:com.android.example.SimpleCalc (test)

      在这里插入图片描述

      查看该测试代码

      在这里插入图片描述

      检查代码并注意以下几点:

      • 唯一的导入来自org.junitorg.hamcrestandroid.test包。对 Android 框架类没有依赖关系。
      • 注释指示将@RunWith(JUnit4.class)用于运行此类中的测试的运行器。测试运行程序是一个库或一组工具,可以进行测试并将结果打印到日志中。对于具有更复杂设置或基础设施要求的测试(例如 Espresso),您将使用不同的测试运行器。对于此示例,我们使用基本的 JUnit4 测试运行程序。
      • @SmallTest注解表示该类中的所有测试都是没有依赖关系的单元测试,并且以毫秒为单位运行。、@SmallTest和注释是使测试组更容易捆绑到类似功能套件中的约定@MediumTest@LargeTest
      • setUp()方法用于在测试前设置环境,并包含@Before注释。在这种情况下,安装程序会创建一个新的Calculator类实例并将其分配给mCalculator成员变量。
      • addTwoNumbers()方法是一个实际测试,并带有注释@Test。只有测试类中具有@Test注释的方法才被视为对测试运行器的测试。请注意,按照惯例,测试方法不包括“测试”一词。
      • 第一行从类中addTwoNumbers()调用add()方法Calculator。您只能测试public或的方法package-protected。在这种情况下,它Calculator是一个public带有public方法的类,所以一切都很好。
      • 第二行是测试的断言。断言是必须计算并导致true测试通过的表达式。在这种情况下,断言是您从 add 方法 (1 + 1) 获得的结果与给定的数字 2 匹配。
    2. 在Android studio中进行测试

      在这里插入图片描述

      在这里插入图片描述

    75.2 向CalculatorTest添加更多单元测试

    通过单元测试,您可以在应用程序中获取一小部分代码,例如方法或类,并将其与应用程序的其余部分隔离,以便您编写的测试确保一小部分代码在你期望的方式。通常,单元测试会调用具有各种不同输入的方法,并验证该方法是否符合您的期望并返回您期望它返回的内容。

    1. 为add()方法添加更多测试

      @Test
      public void addTwoNumbersNegative() {
          double resultAdd = mCalculator.add(-1d,2d);
          assertThat(resultAdd,is(equalTo(1d)));
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5

      运行

      在这里插入图片描述

      -1 + 2 = 1

      为浮点数添加一个新的单元测试

      @Test
      public void addTwoNumbersFloats() {
          double resultAdd = mCalculator.add(1.111f,1.111f);
          assertThat(resultAdd,is(equalTo(2.222d)));
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5

      运行

      测试未通过,说明浮点数运算错误了

      在这里插入图片描述

      浮点数的算术是不精确的,并且提升导致了额外精度的副作用。测试中的断言在技术上是错误的:预期值不等于实际值。

      设置足够接近就算正确,使用closeto

      在这里插入图片描述

      这样就通过了

      使用closeTo()匹配器,您可以测试特定增量内的相等性,而不是测试完全相等。在这种情况下,closeTo()matcher 方法有两个参数:期望值和增量量。在上面的示例中,该增量只是两个小数点的精度。

    2. 为其他计算方法添加单元测试

      这就同理了

      在这里插入图片描述

    75.3 小结

    Android Studio 具有运行本地单元测试的内置功能:

    • 本地单元测试使用本地机器的 JVM。他们不使用 Android 框架。
    • 单元测试是用 JUnit 编写的,JUnit 是 Java 的一个通用单元测试框架。
    • JUnit 测试位于(test)Android Studio Project > Android窗格中的文件夹中。
    • 本地单元测试只需要这些包:org.junitorg.hamcrestandroid.test.
    • @RunWith(JUnit4.class)注释告诉测试运行器在这个类中运行测试。
    • @SmallTest, @MediumTest, 和@LargeTest注解是更容易捆绑相似的测试组的约定
    • 注解表示一个类中的@SmallTest所有测试都是单元测试,没有依赖关系,并且以毫秒为单位运行。
    • 插装测试是在 Android 驱动的设备或模拟器上运行的测试。插桩测试可以访问 Android 框架。
    • 测试运行程序是一个库或一组工具,可以进行测试并将结果打印到日志中。

    捆绑相似的测试组的约定

    • 注解表示一个类中的@SmallTest所有测试都是单元测试,没有依赖关系,并且以毫秒为单位运行。
    • 插装测试是在 Android 驱动的设备或模拟器上运行的测试。插桩测试可以访问 Android 框架。
    • 测试运行程序是一个库或一组工具,可以进行测试并将结果打印到日志中。
  • 相关阅读:
    RAC_11g重启顺序以及常用管理命令
    ImgPlus:基于CodeFormer的图片增强
    汽车电子——产品标准规范汇总和梳理(UDS诊断)
    物联网系统中物模型定义的简要说明
    Java(面试题③)
    个人轻博客PHP开源系统/溯雪Sxlog轻博客源码/洁干净轻/占内存极低/php源码
    300道SpringCloud面试题2022(面试题及答案)
    Tomcat长轮询原理与源码解析
    Android NDK开发之震动服务客户端编写程序(C++)
    按用户导出数据到asm磁盘组,并复制到另一个集群的asm
  • 原文地址:https://blog.csdn.net/weixin_44226181/article/details/126377977