复利计算器4.0之再遇JUnit

  • 前言

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

  • 源代码包结构

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

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

  • 测试主过程

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

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

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

代码如下:

 @Test
public void testCalculate() {
boolean result = false;
CalculateService cs = new CalculateService();
double test = cs.calculateBenjin(2000000,0.03,10);
if(test == 1488187.82979345) result = true;
assertEquals(true,result);
}

测试结果如下:

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

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

测试代码:

 @Test
public void testCalculateInput1() {//合法输入
CalculateService cs = new CalculateService();
boolean result = cs.calculShichangInput(200, 0.5, 100);
assertEquals(true,result);
}
@Test
public void testCalculateInput2() {//非法操作:终额为负数
CalculateService cs = new CalculateService();
boolean result = cs.calculShichangInput(-200, 0.5, 100);
assertEquals(false,result);
}
@Test
public void testCalculateInput3() {//利率为负数
CalculateService cs = new CalculateService();
boolean result = cs.calculShichangInput(200, -0.5, 100);
assertEquals(false,result);
}
@Test
public void testCalculateInput4() {//非法操作:利率大于1
CalculateService cs = new CalculateService();
boolean result = cs.calculShichangInput(200, 2, 100);
assertEquals(false,result);
}
@Test
public void testCalculateInput5() {//非法操作:本金为负数
CalculateService cs = new CalculateService();
boolean result = cs.calculShichangInput(200, 0.5, -100);
assertEquals(false,result);
}
@Test
public void testCalculateInput6() {//非法操作:本金大于终额
CalculateService cs = new CalculateService();
boolean result = cs.calculShichangInput(200, 0.5, 300);
assertEquals(false,result);
}

3.测试结果如下:

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

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

  • 总结

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

复利计算器4.0之再遇JUnit的更多相关文章

  1. 0406.复利计算器5.0版-release

    复利计算器5.0-release 目录 项目简介 Github链接推送 客户需求 新增需求分析 项目设计 效果演示 操作说明 程序结构 结对分工 合作照片 总结 1.项目简介 项目名称:复利计算器 目 ...

  2. 0329 复利计算器5.0 Juint单元测试 组员 254列志华 253韩麒麟

    一.主要功能与需求分析 1.本金为100万,利率或者投资回报率为3%,投资年限为30年,那么,30年后所获得的利息收入:按复利计算公式来计算就是:1,000,000×(1+3%)^30 2.如果按照单 ...

  3. 复利计算器4.0 【java版】

    import java.util.Scanner; public class FuLi { public static void main(String[] args) { ; Scanner sca ...

  4. 单利 复利计算器程序1.0 2.0 3.0 [ 合 ] 之 WEB

    对单复利计算器程序进行改进 更新为网页版的. 界面不太美观 请谅解 由于时间问题暂未完善好! 计算部分的主要源代码:

  5. 0414-复利计算器6.0.Release

    复利计算器6.0--Release 前言 本次复利计算器的版本更新,主要有以下内容的完善: 1.优化了Web版的页面,提供了更舒服美观的用户体现. 2.新增了移动端(安卓)app版本. 版本信息 项目 ...

  6. 复利计算--4.0 单元测试之JAVA版-软件工程

    复利计算--4.0 单元测试-软件工程 前言:由于本人之前做的是C语言版的复利计算,所以为了更好地学习单元测试,于是将C语言版的复利计算修改为JAVA版的. 一.主要的功能需求细分: 1.本金为100 ...

  7. 复利计算器v1

    public class MainFrame extends JFrame { /** * 文本框 */ private TextField[] texts = new TextField[5]; / ...

  8. 复利计算器app发布

    复利计算器app发布 抱歉:由于无法实现服务端的持续开启,发布的app仅为简单的单机版,暂时舍弃了c/s版本的一些功能,如:投资动态管理功能. 应用详情博客:请点击这里 apk下载地址1(百度手机助手 ...

  9. 复利计算1.0,2.0,3.0(java)

    程序源代码: import java.util.Scanner; public class ch { public static void main(String[] args) { Scanner ...

随机推荐

  1. C++ C# VC VC.net以及VC++有什么区别和联系?

    C/C++是编程语言,C是C++的爸爸,也就是说C++从C发展而来,而C++完全兼容C的语法.国际上有一个专门管理C++的机构,它们负责C++的标准制定. VC++是微软公司的C++编译环境,使用它可 ...

  2. Python中模块

    模块 模块对我来说是什么 模块对我来说,感觉就像亲属或者朋友已经走过的路,他们已经趟过的浑水.掉过的坑.践行过的路线,全部提供给你,在你需要的时候请求帮助,借鉴他们的解决方法一样.都是为了方便走好人生 ...

  3. solve the promble of VMware Workstation Ubuntu18.04 ethernet interface losting

    $ ifconfig -aens33: flags=4098<BROADCAST,MULTICAST>  mtu 1500    ether 00:**:**:**:**:**  txqu ...

  4. string函数库的原型

    #ifndef __HAVE_ARCH_STRCPY /** * strcpy - Copy a %NUL terminated string * @dest: Where to copy the s ...

  5. 20155206 2016-2017-2 《Java程序设计》第4周学习总结

    20155206 2006-2007-2 <Java程序设计>第4周学习总结 教材学习内容总结 继承: 避免多个类间重复定义共同行为,在编写程序的过程中可能会出现部分代码重复的现象,把重复 ...

  6. 20145209 2016-2017-2 《Java程序设计》课堂实践内容

    20145209 2016-2017-2 <Java程序设计>课堂实践内容 一.递归 题目详情: public class TestArgs{ public static void mai ...

  7. jsp+servlet+javabean开发web项目

    一.介绍: 项目依赖包:jdbc数据库包 jsp+servlet+javabean开发web项目,是最接近web项目原生运行原理的. 但是,jsp内容混乱,项目结构复杂时,代码会混乱 二.运行原理: ...

  8. [2016北京集训试题8]连在一起的幻想乡[dp+无向图计数]

    Description Solution 本博客参考yww大佬的博客,为了加深理解我就自己再写一遍啦. 以下的“无向图”均无重边无自环. 定义f0[n]为n个点构成的无向图个数,f1[n]为n个点构成 ...

  9. ADO.NET操作MySQL数据库

    前言 ADO.NET包括5大对象,分别是Connection.Command.DataReader.DataSet.DataAdapter,使用ADO.NET访问数据库有两个步骤:建立数据库连接.读取 ...

  10. python的rtree包缺失libspatiaindex.so

    1 准备autoconf工具 yum -y install autoconf automake libtool 2 准备g++编译器 yum -y install gcc gcc-c++ 3 下载并安 ...