复利计算器单元测试
针对复利计算器的单元测试程序
单元测试场景:
1.测试计算公式是否正确
2.测试用户输入非法字符
3.测试输入为空
4.测试输入字符串长度为0
5.测试输入为负数
详细源程序:https://github.com/425221830/CompoundInterestCalculator
单元测试代码
package pers.xisven.test; import static org.junit.Assert.*; import org.junit.Test; import pers.xisven.cic.Calculate; public class CalculateTest { String p = "10000";//P:本金 String i = "0.030";//I:利率 String n = "30";//N:存入年限 String c = "1";//C: 年复利次数 String f = "0";//F:复利终值 @Test //测试求复利公式 public void testCalculateCompoundInterest() { assertEquals(new Calculate(p, i, n, c, f).calculateCompoundInterest(), "24272.6247"); } @Test //测试求单利公式 public void testCalculateSimpleInterest() { assertEquals(new Calculate(p, i, n, c, f).calculateSimpleInterest(), "19000.0000"); } @Test //测试求利率 public void testCalculateI() { assertEquals(new Calculate("1000", null, "5", "1", "1200").calculateI(), ".0371"); } @Test //测试求本金 public void testCalculatePrincipal() { assertEquals(new Calculate(null, "0.03", "10", "1", "50000").calculatePrincipal(), "37204.6957"); } @Test //测试求时间公式 public void testCalculateYears() { assertEquals(new Calculate("30000", "0.03", null, "1", "50000").calculateYears(), "18"); } @Test //测试求回报公式 public void testCalculateInvestment() { assertEquals(new Calculate("20000", "0.025", "10", null, null).calculateInvestment(), "229669.3262"); } @Test //测试求还款公式 public void testCalculateRepayment() { assertEquals(new Calculate("1000000", "0.0325", "10", null, null).calculateRepayment(), "9771.9029"); } @Test //测试输入非法字符 public void testCalculateinput() { p = "adff"; assertTrue(new Calculate(p, i, n, c, f).isError()); } @Test public void testCalculateinput2() { i = "1.2"; assertTrue(new Calculate(p, i, n, c, f).isError()); } @Test public void testCalculateinput3() { n = "10.5"; assertTrue(new Calculate(p, i, n, c, f).isError()); } @Test public void testCalculateinput4() { c = "1.5"; assertTrue(new Calculate(p, i, n, c, f).isError()); } @Test //测试输入为负数 public void testCalculateinput5() { p = "-1000"; assertTrue(new Calculate(p, i, n, c, f).isError()); } @Test //测试输入为空 public void testCalculateCompoundInterest3() { p = null; assertTrue(new Calculate(p, i, n, c, f).getPrincipal()==0); } @Test //测试字符串长度为0 public void testCalculateCompoundInterest4() { p = ""; assertTrue(new Calculate(p, i, n, c, f).getPrincipal()==0); } }
@Test //测试TryCatch public void testTryCatch() { assertEquals(new Calculate(p, i, n, c, f).testTryCatch(p), false); }
更新测试TryCatch仅测试一项,其他语句类似
发现问题:
在利率计算方法中返回值不完整只能输出“.xxx”而不是“0.xxx”
原因:
在保留小数位数时仅考虑到大于1的情况
改进:
//求利率返回值修改如下,为保证返回字符串为完整的小数 return new DecimalFormat("0.0000").format(i);
改进后
测试结果均符合预期
更新为15个测试
总结:
编写Calculate类时利用 try {} catch () {} 语句检测错误进行异常处理
在测试类中利用匿名类调用方法进行判断测试结果
在测试判断时要注意方法的返回值类型和预期结果的类型相符
发现在利率计算方法中返回值不完整只能输出“.xxx”而不是“0.xxx”的问题,查询资料学习DecimalFormat()方法的一些用法