51Testing软件测试论坛

标题: JUnit单元测试入门分享 [打印本页]

作者: lsekfe    时间: 2022-11-10 13:36
标题: JUnit单元测试入门分享
JUnit
  JUnit是一个开源的Java语言的单元测试框架,专门针对Java设计,使用最广泛。
  JUnit 注解
[attach]144737[/attach]
以上就是最常用的五种注解了。
JUnit 断言
  使用JUnit进行单元测试,我们可以使用断言(Assertion)来测试期望结果,可以方便地组织和运行测试,并方便地查看测试结果。
  Junit所有的断言都包含在 Assert 类中。
  这个类提供了很多有用的断言方法来编写测试用例。只有失败的断言才会被记录。Assert 类中的一些有用的方法列式如下:
[attach]144738[/attach]
通常我用的最多的还是assertEquals( )方法。
  Junit 测试用例
  下面就做一个最简单的示例,简单展示用法:
  1. <font size="3">package cn.hust.enhance;
  2.   public class Calculator {
  3.       int age;
  4.       /**
  5.        * 加法
  6.        * @param a
  7.        * @param b
  8.        * @return
  9.        */
  10.       public int add(int a,int b){ return a+b; }
  11.       /**
  12.        * 减法
  13.        * @param a
  14.        * @param b
  15.        * @return
  16.        */
  17.       public int sub(int a,int b){
  18.           return a-b;
  19.       }
  20.   }</font>
复制代码
这是一个Calculator类,里面有add( )和sub( )两个方法,分别代表加和减操作。
  为了测试这两个方法,我们创建一个CalculatorTest类。
  1. <font size="3"> package cn.hust.test;
  2.   import cn.hust.enhance.Calculator;
  3.   import org.junit.jupiter.api.*;
  4.   import static org.junit.jupiter.api.Assertions.assertEquals;
  5.   public class CalculatorTest {
  6.       /**
  7.        * 测试add方法
  8.        */
  9.       @Test
  10.       public void testAdd() {
  11.           Calculator calculator=new Calculator();
  12.           int result = calculator.add(1, 2);
  13.           //断言的第一个参数表示预期的值,第二个参数表示运算的结果
  14.           //这里的的计算结果与预期结果是一致的,所以测试通过
  15.           assertEquals(3, result);
  16.           System.out.println("testAdd()");
  17.       }
  18.       /**
  19.        * 测试sub方法
  20.        */
  21.       @Test
  22.       public void testSub() {
  23.           Calculator calculator=new Calculator();
  24.           int result = calculator.sub(1, 2);
  25.            //断言的第一个参数表示预期的值,第二个参数表示运算的结果
  26.           //这里的的计算结果与预期结果是不一致的,所以测试没通过
  27.           assertEquals(1, result);
  28.           System.out.println("testSub()");
  29.       }
  30.   }</font>
复制代码

测试结果如下:
[attach]144739[/attach]
左侧结果显示testSub()方法没有通过,从右边的结果可以看到,testSub()预期的结果是 1,而实际的结果为-1。而且从输出的内容来看,当断言检查的结果不通过时,后面的语句并不会被执行。
  CalculatorTest类加上@BeforeEach注解和@AfterEach注解:
  新增代码如下:
  1. <font size="3">    /**
  2.        * 初始化方法
  3.        * 在所有方法执行前执行这个方法
  4.        */
  5.       @BeforeEach
  6.       public void init() {
  7.           System.out.println("开始执行");
  8.       }
  9.       /**
  10.        *每个测试方法运行后,运行close()方法
  11.        */
  12.       @AfterEach
  13.       public void close() {
  14.           System.out.println("结束执行");
  15.       }</font>
复制代码

结果如下:
[attach]144740[/attach]
可以看到,先输出了开始执行,再输出testAdd(),最后输出结束执行。这样当我们需要处理一些公共的事务时,就可以采用@BeforeEach注解和@AfterEach注解。
  小结
  1、定义一个测试用例,测试类名为被测试类名+Test。
  2、定义测试方法:可以独立运行。
  ·方法名:test+测试的方法名。
  · 返回值:void。
  · 参数列表:空参。
  3、给方法加@Test注解,用来识别为测试方法。
  4、存在预处理和收尾的处理时,可以使用@BeforeEach和@AfterEach注解,当然也可以用@BeforeAll和@AfterAll注解。
  5、关于JUnit还有很多高级的测试内容,比如参数测试、套件测试等,但是目前我用的就只是这些简单的,所以以后有机会再总结一下。












欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2