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

时间: 2024-08-03 15:29:40

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

0316复利计算器3.0

#include<stdio.h> #include<math.h> double benjin=0,W=0; double year=0; int N=1; double lilv; void danli(){ printf("请输入要存入的本金:"); scanf("%lf",&benjin); printf("请输入年利率:"); scanf("%lf",&lilv); print

0319 复利计算器4.0

  /** 程序完成时间: 3月19日 9:50pm 发表时间: 3月20日 0:18am 此版本是在前三个版本的基础上添加了 等额本息还贷计算 的新功能 并且按照实验要求增强了系统的健壮性,保证在输入一部分的错误的 数据,后程序不会崩溃.例如是在输入int或者是输入double类型的 地方,输入了字符,是会提示并且允许重新输入. 并且通过宏定义使得代码变得简洁,还有简化了修改的操作,还认识 到宏定义的妙用是可以使得编程变得简单,还可以增大代码的复用性. **/ 1 #include<stdio

复利计算器4.0 【java版】

import java.util.Scanner; public class FuLi { public static void main(String[] args) { double N=1; Scanner scanner=new Scanner(System.in); System.out.println("请选择复利计算(1)or单利计算(2)or计算本金(3)or投资年数(4)or报酬率(5)or年资产总值(6)or月资产总值(7):"); int choose=scann

复利计算器3.0

package fulijisuanqi02; import java.text.DecimalFormat; import java.util.Scanner; public class fulijisuanqi02 { static Scanner scanner = new Scanner(System.in); static DecimalFormat df = new DecimalFormat("####0.0000"); public static void main(S

复利计算器5.0加强版

一.客户需求 已完成需求: 1.客户说:帮我开发一个复利计算软件. 2.如果按照单利计算,本息又是多少呢? 3.假如30年之后要筹措到300万元的养老金,平均的年回报率是3%,那么,现在必须投入的本金是多少呢? 4.利率这么低,复利计算收益都这么厉害了,如果拿100万元去买年报酬率10%的股票,若一切顺利,过多长时间,100万元就变成200万元呢? 5.如果我希望在十年内将100万元变成200万元,应该找到报酬率在多少的投资工具来帮助我达成目标?如果想在5年后本金翻倍,报酬率就应至少为多少才行呢

复利计算器2.0

package JSQ; import java.awt.EventQueue; import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.border.EmptyBorder;import javax.swing.JLabel;import javax.swing.JTextField;import javax.swing.JButton;import java.awt.event.ActionListener

复利计算器6.0

对界面进行了升级添加了用户注册于登录界面,更完善的功能待续.... 主要代码: 1 package DataBase; 2 3 import java.sql.Connection; 4 import java.sql.ResultSet; 5 import java.sql.SQLException; 6 import java.sql.Statement; 7 8 public class SingUpConnect { 9 private Connection connection; 10

复利计算器5.0

代码链接:https://github.com/LinWenFeng/CompoundInterest

复利计算3.0 心得

这个星期老师在原来复利计算上布置了新的任务,让我慢慢的进入状态来一步一步的完善我的代码,虽然运行的代码不够“豪华”,但是自己有在感觉到在一点点的进步和总结,会慢慢发现每次写总结会对以后的编程之路有益,因为是在记录自己一点点的进步和解决疑惑之处,因为基础问题,在刚开始的编程之路会有很多缺陷,但是会一步步成长起来的,因为最近有学网页制作界面,发现jsp的界面编写会比java简单一些,所以这次总结后,有时间会去尝试用jsp来总结编写,因为感觉用eclipse来创建窗口太复杂. 回顾布置的问题,并附上操