复利计算器单元测试

针对复利计算器的单元测试程序

单元测试场景:

  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()方法的一些用法

原文地址:https://www.cnblogs.com/xiseven/p/5332476.html