• JUnit学习


    很早以前就知道JUnit也知道它用来做单元测试。今天突然又想到还是要学一下这个JUnit,不然说出去不知道怎么用JUnit做单元测试……作为一个程序员怪丢人的。第一篇JUnit不算是一个总结性的文章,只算是第一次摸索着学习JUint怎么来用。到目前来看,确实可能和网上说的一样,不过是多了几个main方法而已,不过,我相信随着学习的深入,JUnit不仅仅是作为几个main方法来调用这么简单。

    使用JUnit官方提供了几种方法,一是手动导入jar包,但在手动导入jar包的时候一定要记得导入两个包:

    我们这里使用junit-4.12.jar和hamcrest-core-1.3.jar。JUnit的GitHub地址:https://github.com/junit-team/junit4/wiki/Download-and-Install

    我们首先来写一个计算器类(之前在简单工厂里同样实现过计算器,这里为演示JUnit的demo,所以就不要在意是否面向对象等等问题了)。

     1 package day_13_junit;
     2 
     3 /**
     4  * @author turbo
     5  *
     6  * 2016年9月18日
     7  */
     8 public class Calc {
     9     public double add(double numberA, double numberB){
    10         return numberA + numberB;
    11     }
    12     
    13     public double div(double numberA, double numberB){
    14         return numberA - numberB;
    15     }
    16     
    17     public double mul(double numberA, double numberB){
    18         return numberA * numberB;
    19     }
    20     
    21     public double sub(double numberA, double numberB){
    22         return numberA / numberB;
    23     }
    24 }

    好了,我们现在要来测试这个计算器的一般做法是写一个main方法吧,这确实也没问题,这次我们用JUnit来做测试。

     1 package day_13_junit;
     2 
     3 import static org.junit.Assert.assertEquals;
     4 
     5 import org.junit.Before;
     6 import org.junit.Test;
     7 
     8 /**
     9  * 单元测试
    10  * @author turbo
    11  *
    12  * 2016年9月18日
    13  */
    14 public class TestCalc {
    15     Calc calc;
    16     
    17     @Before
    18     public void setUp(){
    19         calc = new Calc();
    20     }
    21     
    22     @Test
    23     public void testAdd(){
    24         double result = calc.add(1, 1);
    25         System.out.println(result);
    26         assertEquals(1.0, result, 1.0);
    27         
    28     }
    29     
    30     @Test
    31     public void testDiv(){
    32         double result = calc.div(1, 2);
    33         System.out.println(result);
    34     }
    35 }

    @Before注解从字面上来很好理解,在执行具体某个测试方法前执行这个方法。

    @Test就是具体的测试方法。

    我们看到一个assertEqueals静态方法第一个参数表示期望值,第二个参数表示实际值,第三个参数表示误差值。在Assert类中对该方法有大量的重载,由于double类型方法在以前的JUnit的assertEqueals只有两个参数,当我只写两个参数时发现已经被弃用。

    我们可以通过源码发现:

    1 /**
    2      * @deprecated Use
    3      *             <code>assertEquals(double expected, double actual, double delta)</code>
    4      *             instead
    5      */
    6     @Deprecated
    7     static public void assertEquals(double expected, double actual) {
    8         assertEquals(null, expected, actual);
    9     }

    原来两个参数的assertEquals方法已经被替换,新增加了一个误差值参数。我们看看替换的方法。

     1  /**
     2      * Asserts that two doubles are equal to within a positive delta.
     3      * If they are not, an {@link AssertionError} is thrown. If the expected
     4      * value is infinity then the delta value is ignored.NaNs are considered
     5      * equal: <code>assertEquals(Double.NaN, Double.NaN, *)</code> passes
     6      *
     7      * @param expected expected value
     8      * @param actual the value to check against <code>expected</code>
     9      * @param delta the maximum delta between <code>expected</code> and
    10      * <code>actual</code> for which both numbers are still
    11      * considered equal.
    12      */
    13     static public void assertEquals(double expected, double actual, double delta) {
    14         assertEquals(null, expected, actual, delta);
    15     }

    对该方法的参数解释前两个参数很好懂,为什么会新增一个误差值呢?因为double类型浮点数运算并不一定是“绝对准确”的,所以新增一个误差值,这个误差值的范围在期望值和实际值之间。什么意思呢?比如1.0+1.0应该等于2.0,所以我们期望它等于2.0,但实际情况可能某种原因并非如此,所以我们给它一个误差值1.0,这样在范围1.0~3.0都可以认为是“正确”的。

    这两个@Test方法,在空白处选择JUnit Test运行时可以同时运行。当我们只想运行一个@Test方法时,只需选择方法名右键选择JUnit Test运行即可运行单个方法。

    第一次的JUnit学习就到这里了,一点点小东西,没什么干货,重在积累,重在坚持。

  • 相关阅读:
    Ubuntu开机等待5分钟的取消方法
    329. 矩阵中的最长递增路径
    关于c语言中NULL的数值是否可以被修改
    #pragam在c++(visual studio 2019)编译器中的使用
    当cpu占有率过高时-sleep(0)的妙用
    inline解析
    一、【pytest实战--Web测试】搭建环境
    用openssl aes256 api实现文件加解密-带例程,兼容openssl enc -aes-256-cbc命令
    kali openvas安装
    C++关于变量初始化的琐记
  • 原文地址:https://www.cnblogs.com/yulinfeng/p/5883558.html
Copyright © 2020-2023  润新知