超级详细的Junit单元测试教程(一)

发表于:2022-8-31 09:26

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:何学长在奔跑    来源:今日头条

  一、什么是单元测试
  在计算机编程中,单元测试(英语:Unit Testing)又称为模块测试, 是针对程序模块(软件设计的最小单位)来进行正确性检验的测试工作。 程序单元是应用的最小可测试部件。简单来说,就是测试数据的稳定性是否达到程序的预期。
  二、单元测试的重要性
  谈到测试,我们为什么要对程序进行测试呢?测试会为程序带来什么好处呢?
  首先,我们每个人都会犯错误。毕竟人嘛,没有完美的谁谁谁。在程序中犯错误就像生活中犯错一样,错误不是一天两天而形成的。当需要改的时候,也不是能花少的时间而改掉的。这里我谈到的程序中的错误,就是著名的Bug
  我们可能在不经意间写错,如果你到了最后阶段去检验项目成果时,发现会有错误,这时候我们很难找到Bug的源头在哪里。我们都知道,有可能一处出错会导致步步错的情况。
  然而,测试就在我们的上述说法中,显得尤为重要。有了测试的概念,这时候当我们做完项目的一个小模块,我们先去测试一下这个小模块是否正确或达到预期,如果错误或者没有达到预期就需要反复修改,直到正确或达到预期。这里所说的也就是使用了单元测试。
  当我们一块一块的做完并一块一块的测试后OK后,这时候你会发现项目像拼图一样拼在了一起。简单来说,这就是单元测试存在的重要意义!
  声明: 术语显得过于生硬,白话文也许会让你们了解,请谅解我的大白话!谢谢!
  三、黑盒测试白盒测试
  3.1 黑盒测试
  黑盒测试又称功能测试。它通过测试来检验程序是否能正常使用。在测试过程中,我们把程序看作为一个打不开的盒子,黑黑的什么也看不见,内部代码怎么写的也不知道。也就是说完全不考虑任何内部结构和性能的情况下为程序传入(Input)参数,然后去查看程序输出(Output)是否在正常范围内,通常这时候我们需要多此测试才得出结论。
  特点: 不需要我们中间参与编写任何代码,传入参数值后查看程序是否正常或达到预期值。
  3.2 白盒测试
  白盒测试又称结构测试。在这里白盒测试与黑盒测试不同,在测试过程中,我们可以把程序看作为一个可以看到的白色透明盒子,我们清楚盒子内部的代码和结构。我们在使用白盒测试的时候,测试人员必须检查程序的内部结构,而要从检查程序的逻辑开始,一步一步的检查传入参数(Input)并查看程序的运行过程和输出(Output)结果,最终得出测试数据。这也就是“白盒测试”为什么叫穷举路径测试的原因,再次强调,是因为我们清楚程序的内部结构和代码,从而检查所有结构的正确与否和预期值。
  注意: 单元测试就是白盒测试的一种!
  四、单元测试思想传递
  在这里我们忘掉单元测试,使用平时我们自己测试的方式来测试数据,看看它有什么缺点。
  首先,我先创建在一个计算器类,在其中随便创建两个运算方法,供我们模拟测试。
  package com.mylifes1110.java;
  /**
   * 计算器
   */
  public class Calculator {
      /**
       * 加法
       */
      public int add(int num1, int num2) {
          return num1 + num2;
      }
      /**
       * 减法
       */
      public int cut(int num1, int num2) {
          return num1 - num2;
      }
  }
  然后我们再去编写测试类,创建对象,先去测试加法。
  package com.mylifes1110.java;
  public class Test {
      public static void main(String[] args) {
          Calculator calculator = new Calculator();
          //测试加法
          System.out.println(calculator.add(10, 10));//20正确
      }
  }
  测试后,我们查看结果为正确的,然后进行下一步测试。因为我们有两条数据需要测试,平时在测试完一条数据后需要把测试过的数据注释掉,再进行接下来的测试。如下:
  package com.mylifes1110.java;
  //测试类
  public class Test {
      public static void main(String[] args) {
          Calculator calculator = new Calculator();
          //测试加法
  //        System.out.println(calculator.add(10, 10));//20正确
          //测试减法
          System.out.println(calculator.cut(10, 10));//0正确
      }
  }
  测试完两条数据后,再去继续编写我们的项目代码。
  其实,我们有没有发现这样做很麻烦呢?上一步骤为什么需要把测试过的数据注释掉呢?
  答案来了,的确很麻烦,至于为什么注释掉,那是因为我们在写项目代码的时候,需要测试,不可能在同一个测试类测试这么多数据。而且在测试的过程序,数据与数据之间是有关联是互相影响的。这就会造成我们的测试不准确从而影响后续编码进度和项目准确性。
  了解了上述测试的缺点,我们也需要了解单元测试的思想了。单元测试需要拥有什么样的特点才能解决掉上述测试的麻烦呢?其实我们的单元测试也是通过编码规范来约束的。至于编码规范嘛,你还不去看第五章?
  五、单元测试的编码规范
  单元测试的编码规范有这几条,小伙伴们拿小本本记好了!
  ·类名: 定义测试类,类名是由被测试类名Test构成。例如:CalculatorTest
  · 包名: 定义的测试类需要放在xxx.xxx.xxx.test包中。例如:package com.mylifes1110.test;
  · 方法名: 测试方法的方法名有两种定义方式test测试方法和测试方法。例如:testAdd和add
  · 返回值: 因为我们的方法只是在类中测试,可以独立运行,所以不需要处理任何返回值,所以这里使用void。例如:public void add();
  · 参数列表: 因为我们的方法是用来测试的,至于参数列表的传入是没有必要的。我们在测试的时候自行传入需要的参数测试即可。所以在此参数列表为空。例如:例如:public void add();
  · @Test注解: 测试是需要运行来完成的。如果我们只有一个main方法,显然在结构上还是需要我们去注释掉测试过的。解决此问题这里我们需要在测试方法上方加@Test注解来完成测试,只要是加该注解的方法,可以单独运行此方法来完成测试。
  · @Test注解jar包Junit4、5: @Test注解是需要我们导入jar包才能使用的。jar包有两个分别是:junit-4.13-rc-2和hamcrest-core-1.3。这里我使用的是Junit4,单元测试还有Junit5,版本差异我没有做了解。主要是可以完成测试才是硬道理!
  · IDEA快捷导入Junit4、5: 使用IDEA的小伙伴,你们的福音来了。我们可以先创建测试类和方法,然后在测试方法上方加入@Test注解,此时IDEA显示的@Test注解是飘红的,这时候我们使用Alt + Enter组合键来打开导入Junit单元测试列表,然后再选择Junit4或者Junit5确定即可导入成功!这时候再查看注解就没有飘红了!
  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号