zoukankan      html  css  js  c++  java
  • 复利计算器4.0之再遇JUnit

    复利计算器4.0之再遇JUnit

    • 前言

       虽然之前的复利计算器版本已经尝试过使用JUnit单元测试,但由于没有系统性地学习过JUnit的使用,用得并不好,主要问题表现在测试的场景太少,并没有达到测试所需的全面性,没能体现JUnit这一神器的精髓所在,为此本版本的复利计算器在JUnit单元测试方面做了一些完善。

    • 源代码包结构

         

        如上图所示,我把测试类统一放在新建的test源码文件下(test打错了,已改),以便和程序代码分离,方便操作。

        细心看你就能发现,test目录下的包和程序SRC目录下相应功能的代码包名一致,这是为了表明测试的模块针对,做法参考自马士兵老师的教学视频,应该也算是一种操作规范吧。。。

    • 测试主过程 

    本程序的JUnit测试主要应用于两个方面:

      1. 对逻辑计算的测试--用于对合法的输入后,对程序计算结果的检测,测试程序的逻辑计算是否达到了预期效果。

                        下面以复利终额计算的测试为例。

    代码如下:

    1 @Test
    2     public void testCalculate() {
    3         boolean result = false;
    4         CalculateService cs = new CalculateService();
    5         double test = cs.calculateBenjin(2000000,0.03,10);
    6         if(test == 1488187.82979345) result = true;
    7         assertEquals(true,result);
    8     }

         测试结果如下:

          

          其他逻辑计算模块的测试类似,就不一一列举了。

     

    2.对操作场景的测试--用于测试各种用户可能的操作,如各种数据的输入,以检测程序对这些操作所做响应是否与预期效果一致。下面再以复利终额计算的测试为例

         测试代码: 

     1 @Test
     2     public void testCalculateInput1() {//合法输入
     3         CalculateService cs = new CalculateService();
     4         boolean result = cs.calculShichangInput(200, 0.5, 100);
     5         assertEquals(true,result);
     6     }
     7     @Test
     8     public void testCalculateInput2() {//非法操作:终额为负数
     9         CalculateService cs = new CalculateService();
    10         boolean result = cs.calculShichangInput(-200, 0.5, 100);
    11         assertEquals(false,result);
    12     }
    13     @Test
    14     public void testCalculateInput3() {//利率为负数
    15         CalculateService cs = new CalculateService();
    16         boolean result = cs.calculShichangInput(200, -0.5, 100);
    17         assertEquals(false,result);
    18     }
    19     @Test
    20     public void testCalculateInput4() {//非法操作:利率大于1
    21         CalculateService cs = new CalculateService();
    22         boolean result = cs.calculShichangInput(200, 2, 100);
    23         assertEquals(false,result);
    24     }
    25     @Test
    26     public void testCalculateInput5() {//非法操作:本金为负数
    27         CalculateService cs = new CalculateService();
    28         boolean result = cs.calculShichangInput(200, 0.5, -100);
    29         assertEquals(false,result);
    30     }
    31     @Test
    32     public void testCalculateInput6() {//非法操作:本金大于终额
    33         CalculateService cs = new CalculateService();
    34         boolean result = cs.calculShichangInput(200, 0.5, 300);
    35         assertEquals(false,result);
    36     }

    3.测试结果如下:

     

    本测试类里根据不同场景设计了不同的测试,具体场景请看展示代码里的注释。

       需要注意的是,有的方法测试并不一定以true为正确返回值,如本程序中的非法输入拦截功能,在检测到非法输入时就应该返回false才是正确的。如下图所示:

    • 总结 

       JUnit确实是一个很实用的东西,并且很灵活,用法因程序而异,也因人而异,我也只是刚刚接触,知道的也有限,用得有点生硬但是感觉比上一次用得顺手了,以后还得多练习吧。 

     

  • 相关阅读:
    [程序员代码面试指南]栈和队列-单调栈结构(单调栈)
    快学Scala第一部分
    Add Digits
    Nim Game
    将分布式中多台节点的日志信息集中到一个节点上
    Eclipse调试的一些小技巧
    Maven的常用命令
    Eclipse插件本地扩展安装
    Spark应用程序的运行框架
    Spark运行各个时间段的解释
  • 原文地址:https://www.cnblogs.com/liangzhilin/p/5330773.html
Copyright © 2011-2022 走看看