单元测试之Junit4详解(真)

本文深入探讨了单元测试的重要性和使用Junit4进行单元测试的实践。介绍了单元测试的基本概念、Junit的使用,包括断言方法、测试套件、参数化测试、分类测试、假设测试等关键功能,并提供了详细的示例代码。此外,还讨论了在Android环境中进行单元测试的注意事项和可能遇到的问题。

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

单元测试之Junit4详解(真)



  • 正文
  • 开始是一些概念性的知识点,可以了解一下,不感兴趣可以直接跳到Junit的讲解中

代码测试

  1. 按是否查看程序内部结构分为
  • 黑盒测试(black-box testing):只关心输入和输出的结果,黑盒测试分为功能测试和性能测试
  • 白盒测试(white-box testing):去研究里面的源代码和程序结构
  1. 按是否运行程序分为:静态测试、动态测试
  • 静态测试(static testing):是指不实际运行被测软件,而只是静态地检查程序代码、界面或文档可能存在的错误的过程。包括:
    • 对于代码测试,主要是测试代码是否符合相应的标准和规范。
    • 对于界面测试,主要测试软件的实际界面与需求中的说明是否相符。
    • 对于文档测试,主要测试用户手册和需求说明是否真正符合用户的实际需求。
  • 动态测试(dynamic testing):是指实际运行被测程序,输入相应的测试数据,检查输出结果和预期结果是否相符的过程
  1. 按阶段划分:
  • 单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。
    桩模块(stud)是指模拟被测模块所调用的模块,驱动模块(driver)是指模拟被测模块的上级模块,驱动模块用来接收测试数据,启动被测模块并输出结果。
  • 集成测试(integration testing),是单元测试的下一阶段,是指将通过测试的单元模块组装成系统或子系统,再进行测试,重点测试不同模块的接口部门。
    集成测试就是用来检查各个单元模块结合到一起能否协同配合,正常运行。
  • 系统测试(system testing),指的是将整个软件系统看做一个整体进行测试,包括对功能、性能,以及软件所运行的软硬件环境进行测试。
    系统测试的主要依据是《系统需求规格说明书》文档
  • 验收测试(acceptance testing),指的是在系统测试的后期,以用户测试为主,或有测试人员等质量保障人员共同参与的测试,它也是软件正式交给用户使用的最后一道工序
    验收测试又分为a测试和beta测试,其中a测试指的是由用户、 测试人员、开发人员等共同参与的内部测试,而beta测试指的是内测后的公测,即完全交给最终用户测试

什么是单元测试

  • 维基百科定义简化版如下:
    • 单元测试 是针对 程序的最小单元 来进行正确性检验的测试工作。程序单元是应用的最小可测试部件。一个单元可能是单个程序、类、对象、方法等。 ——维基百科
  • 单元测试的分类
    • 本地测试(Local tests): 只在本地机器JVM上运行,以最小化执行时间,这种单元测试不依赖于Android框架,或者即使有依赖,也很方便使用模拟框架来模拟依赖,以达到隔离Android依赖的目的,模拟框架如google推荐的[Mockito
    • 仪器化测试(Instrumented tests): 在真机或模拟器上运行的单元测试,由于需要跑到设备上,比较慢,这些测试可以访问仪器(Android系统)信息,比如被测应用程序的上下文,一般地,依赖不太方便通过模拟框架模拟时采用这种方式
  • 单元测试要测试什么
    • 列出想要测试覆盖的正常、异常情况,进行测试验证
    • 性能测试,例如某个算法的耗时等等

为什么要使用单元测试

  • 减少bug
  • 快速定位bug、减少调试时间
  • 提高代码质量
  • 放心重构
  • 主要是:领导要求、大牛都写单元测试、保住面子、心虚

Android中的测试

  • 单元测试(Junit4、Mockito、PowerMockito、Robolectric)
  • UI测试(Espresso、UI Automator)
  • 压力测试(Monkey)
  • 使用单元测试的时候注意进行依赖隔离
  • Anddroid中的单元测试框架有很多,Junit,Mockito,Robolectric,PowerMockito

注意

  • 这里提一句,测试用例用来达到也想要的结果,但对于逻辑错误无能为力
    • 两种错误:断言方法报错,逻辑代码问题

Junit介绍

  • 引用官网上的介绍:A programmer-oriented testing framework for Java.
    • 它是一个Java的面向程序员的测试框架
  • 了解 xUnit
    • xUnit是一套基于测试驱动开发的测试框架,包括了 PythonUint、CppUnit、Junit,分别是 Python、C++、Java的测试框架

使用

  • Junit 的功能十分的强大,知识点有很多,我这里讲一些常见的,剩下的大家自己下去了解

导入依赖

  • app/build 下导包
testImplementation 'junit:junit:4.12' //前面是 testImplementation

基本使用,断言方法

  • 先准备好 原类(被测试类)
    • 注意,被测试的方法是要用 public 修饰,不然调用不到
    • 如下,下面就是几个简单的计算方法
public class Calculator {

    public int add(int a,int b) {
        return a + b;
    }

    public int subtract(int a,int b) {
        return a - b;
    }

    public int multiply(int a,int b) {
        return a * b;
    }

    public int divide(int a,int b) {
        return a / b;
    }
}
  • 鼠标光标移至 被测试类名 处,快捷键:Alt + Enter -> 选择 create Test (或者 右击 -> go to -> Test),然后进行选择一些类的方法、存放路径等信息,完成即可生成 测试类。测试类名是以 Test 作为后缀的,接下来就可以进行一些测试操作了
    • 关于 测试类 存放的位置
      • AS已经自动帮我们创建好了,如下:
app/src
     ├── androidTestjava (仪器化单元测试、UI测试)
     ├── main/java (业务代码)
     └── test/java  (本地单元测试)
  • 然后编写测试方法,使用 @Test 进行注解,都是 public void 且 无参数 的方法,这里编写测试方法有快捷键:Alt + Insert 即可选择自动生成测试方法等
    • 方法名与原类中的方法名一致,或以 test 为前缀进行命
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值