技术心得记录:复利计算器4.0之再遇JUnit

简介: 技术心得记录:复利计算器4.0之再遇JUnit

复利计算器4.0之再遇JUnit


前言


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


源代码包结构


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


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


测试主过程


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


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


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


代码如下:


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 //代码效果参考:http://www.lyjsj.net.cn/wz/art_23745.html

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


Github代码传送门:


请点击这里

相关文章
|
5月前
|
XML Java 数据库连接
浅谈后端boot框架整合第三方技术JUnit MyBatis Druid整体思想
浅谈后端boot框架整合第三方技术JUnit MyBatis Druid整体思想
33 0
|
Java 数据库连接 数据库
高效掌握JDBC技术(三)| 三层架构理念 | 书写符合事务特性的工具类 | JUnit测试框架 | JDBC项目开发步骤(下)
高效掌握JDBC技术(三)| 三层架构理念 | 书写符合事务特性的工具类 | JUnit测试框架 | JDBC项目开发步骤
106 1
|
Java 数据库连接 数据库
高效掌握JDBC技术(三)| 三层架构理念 | 书写符合事务特性的工具类 | JUnit测试框架 | JDBC项目开发步骤(上)
高效掌握JDBC技术(三)| 三层架构理念 | 书写符合事务特性的工具类 | JUnit测试框架 | JDBC项目开发步骤
138 1
|
Java 数据库连接 数据库
高效掌握JDBC技术(三)| 三层架构理念 | 书写符合事务特性的工具类 | JUnit测试框架 | JDBC项目开发步骤
高效掌握JDBC技术(三)| 三层架构理念 | 书写符合事务特性的工具类 | JUnit测试框架 | JDBC项目开发步骤
177 0
高效掌握JDBC技术(三)| 三层架构理念 | 书写符合事务特性的工具类 | JUnit测试框架 | JDBC项目开发步骤
|
Java 测试技术 程序员
走进JavaWeb技术世界11:单元测试框架Junit
本系列文章将整理到我在GitHub上的《Java面试指南》仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下Star哈 文章首发于我的个人博客: www.how2playlife.com 本文是微信公众号【Java技术江湖】的《走进JavaWeb技术世界》其中一篇,本文部分内容来源于网络,为了把本文主题讲得清晰透彻,也整合了很多我认为不错的技术博客内容,引用其中了一些比较好的博客文章,如有侵权,请联系作者。
|
3月前
|
XML Java 测试技术
Spring5入门到实战------17、Spring5新功能 --Nullable注解和函数式注册对象。整合JUnit5单元测试框架
这篇文章介绍了Spring5框架的三个新特性:支持@Nullable注解以明确方法返回、参数和属性值可以为空;引入函数式风格的GenericApplicationContext进行对象注册和管理;以及如何整合JUnit5进行单元测试,同时讨论了JUnit4与JUnit5的整合方法,并提出了关于配置文件加载的疑问。
Spring5入门到实战------17、Spring5新功能 --Nullable注解和函数式注册对象。整合JUnit5单元测试框架
|
22天前
|
Java 程序员 测试技术
Java|让 JUnit4 测试类自动注入 logger 和被测 Service
本文介绍如何通过自定义 IDEA 的 JUnit4 Test Class 模板,实现生成测试类时自动注入 logger 和被测 Service。
21 5
|
2月前
|
SQL JavaScript 前端开发
基于Java访问Hive的JUnit5测试代码实现
根据《用Java、Python来开发Hive应用》一文,建立了使用Java、来开发Hive应用的方法,产生的代码如下
71 6