• 复利计算4.0--简单的单元测试


    要求:

       对我们和复利计算程序,写单元测试。 

       有哪些场景?

       期待的返回值

       写测试程序。

       运行测试。

    测试内容:1、对复利计算4.0的数据输入进行简单测试(测试公式是否正确)

                 2、对空输入进行测试

                 3、对除数为0的情况进行测试

    配置Junint:我对于这个不是很熟悉,在网上搜了搜,找到的一个不错的教程,在这里推荐一下

       http://jingyan.baidu.com/album/380abd0a4d021a1d91192c40.html?picindex=1

    测试:

    1、针对以下代码进行测试,测试计算结果和预测结果之间的偏差是否不超过3,以测试公式是否正确

         (1)源代码:

     //计算终值
        public double init(float p,float n,double r){
            double f = p * Math.pow((1 + 0.01*r),n);
            return f;    
        }

        (2)测试类代码:

    package fuli_4;
    
    import static org.junit.Assert.*;
    
    import org.junit.Assert;
    import org.junit.Before;
    
    public class Test {
    
        @Before
        public void setUp() throws Exception {
        }
        @org.junit.Test
        public void testinit() {
            fuli_4 fuli = new fuli_4();
            double f = fuli.init(100000,10,3);
            Assert.assertEquals(f, 134390, 3.0);
        }
    }

        (3)测试结果:预期结果为134390,但实际为134391.64,而这个偏差小于3,所以测试正确,即所测试的代码运算公式是正确的

    其它公式测试类同,在这里就不一一发了,经过测试,结果都是正确的 

    2、对空输入进行测试:当没有输入任何数据时,我希望不执行运算,并提示“请正确输入数据再执行运算”;

        (1)源代码:

    //计算
        public void run(){
            try  {
            double f = 0;
            
            NumberFormat currencyformatter = NumberFormat.getCurrencyInstance(); // 字符串转化为数字
            float p = Float.parseFloat(jTextField0.getText());
            float r = Float.parseFloat(jTextField2.getText());
            float n = Float.parseFloat(jTextField1.getText());
                if (jComboBox1.getSelectedItem() == "复利计算") 
                { 
                    if (jComboBox0.getSelectedItem() == "终值计算") {    
                        f = p * Math.pow((1 + 0.01*r),n);
                    }
                    if (jComboBox0.getSelectedItem() == "本金计算") {
                        f = p/Math.pow((1+0.01*r), n);
                    }     
                else if (jComboBox0.getSelectedItem() == "年限计算") {
                    f = (Math.log(n/p))/(Math.log(1+0.01*r));
                }
                else if (jComboBox0.getSelectedItem() == "利率计算") {
                    f = 100*( Math.pow(r/p,1d/n)-1);
                }
                else if (jComboBox0.getSelectedItem() == "基金定投") {
                    f = p*(1+0.01*r)*(-1+Math.pow(1+0.01*r,n))/(0.01*r);
                } 
                else if (jComboBox0.getSelectedItem() == "等额本息还款") {
                    f=p*((0.01*r/12)*Math.pow((1+0.01*r/12),n))/(Math.pow((1+0.01*r/12),n)-1);
                }
            }
            else {
                if (jComboBox0.getSelectedItem() == "终值计算") {
                    f = p*(1+0.01*r*n);
                }
                else if (jComboBox0.getSelectedItem() == "本金计算") {
                    f = p/(1+0.01*r*n);
                } 
                else if (jComboBox0.getSelectedItem() == "年限计算") {
                    f = ((n/p)-1)/(0.01*r);
                }
                else if (jComboBox0.getSelectedItem() == "利率计算") {
                    f = 100*(((r/p)-1)/n);
                }
            } 
            
            DecimalFormat df = new DecimalFormat("0.00"); 
            String db = df.format(f);
            jTextField3.setText(String.valueOf(db));
            }
            catch(Exception e){
                System.out.println(e.getMessage());
            }
        }

        (2)测试代码:

    //测试当输入值为空时,计算结果提示请正确输入
        @org.junit.Test
        public void testReturn() {
            fuli_4 fuli = new fuli_4();
            boolean se = false;
            fuli.run();
            if(fuli.jLabel9.getText()=="请正确输入数据在执行运算"){
                se = true;
            }
            assertEquals(true,se);
        }

          (3)测试结果

    可以看出测试出错了,因为没有输入,文本框内string值转化为数据时出错,这时为源代码添加一个判断的条件即可,添加代码如下,如果存在空输入,提示输入>0的数字,并且输出的结果为0.00

    // 当输入值为空时,计算结果返回0
    if (jTextField0.getText().equals("") || jTextField1.getText().equals("")|| jTextField2.getText().equals("")) {
        jLabel5.setText("请输入>0的数字");
        jLabel7.setText("请输入>0的数字");
        jLabel8.setText("请输入>0的数字");
      jLabel9.setText("请正确输入数据在执行运算"); f
    = 0.0; }

    这时的测试结果为:

    如上图所示,这时的测试通过了。

    而且运行结果也不再报错

     3、一般情况下,在数学公式中,除数是不能为0的,所以对输入的数据进行检测,如果输入为0或小于0的数,则提示”输入大于0的数“,并且不执行运算,在结果文本框显示“请正确输入数据”

      (1)如下图,就算出现除数为0,也会执行运算,所以针对这个一目了然的错误,在检测前就可以对代码进行一定的更改

      (2)在检测2的源代码的基础上添加条件,更改后的源代码如下:

           else {
                    NumberFormat currencyformatter = NumberFormat.getCurrencyInstance(); // 字符串转化为数字
                    float p = Float.parseFloat(jTextField0.getText());
                    float r = Float.parseFloat(jTextField2.getText());
                    float n = Float.parseFloat(jTextField1.getText());
                    if (p <= 0) 
                    {
                        jLabel5.setText("请输入>0的数字");
                        jLabel9.setText("请正确输入数据在执行运算");
                    } 
                    if (n <= 0)
                    {
                        jLabel8.setText("请输入>0的数字");
                        jLabel9.setText("请正确输入数据在执行运算");
                    }
                    if (r <= 0) 
                    {
                        jLabel7.setText("请输入>0的数字");
                        jLabel9.setText("请正确输入数据在执行运算");
                    } 
                    if(p>0&&n>0&&r>0){
                        if (jComboBox1.getSelectedItem() == "复利计算") {
                            if (jComboBox0.getSelectedItem() == "终值计算") {
                                f = p * Math.pow((1 + 0.01 * r), n);
                            }
                            if (jComboBox0.getSelectedItem() == "本金计算") {
                                f = p / Math.pow((1 + 0.01 * r), n);
                            } else if (jComboBox0.getSelectedItem() == "年限计算") {
                                f = (Math.log(n / p)) / (Math.log(1 + 0.01 * r));
                            } else if (jComboBox0.getSelectedItem() == "利率计算") {
                                f = 100 * (Math.pow(r / p, 1d / n) - 1);
                            } else if (jComboBox0.getSelectedItem() == "基金定投") {
                                f = p * (1 + 0.01 * r) * (-1 + Math.pow(1 + 0.01 * r, n)) / (0.01 * r);
                            } else if (jComboBox0.getSelectedItem() == "等额本息还款") {
                                f = p * ((0.01 * r / 12) * Math.pow((1 + 0.01 * r / 12), n))
                                        / (Math.pow((1 + 0.01 * r / 12), n) - 1);
                            }
                        } else {
                            if (jComboBox0.getSelectedItem() == "终值计算") {
                                f = p * (1 + 0.01 * r * n);
                            } else if (jComboBox0.getSelectedItem() == "本金计算") {
                                f = p / (1 + 0.01 * r * n);
                            } else if (jComboBox0.getSelectedItem() == "年限计算") {
                                f = ((n / p) - 1) / (0.01 * r);
                            } else if (jComboBox0.getSelectedItem() == "利率计算") {
                                f = 100 * (((r / p) - 1) / n);
                            }
                        }
    
                        DecimalFormat df = new DecimalFormat("0.00");
                        String db = df.format(f);
                        jTextField3.setText(String.valueOf(db));
                    }
                }

      (3)测试代码如下:

            //测试当输入值为0时,计算结果提示请正确输入
            @org.junit.Test
            public void testRun() {
                fuli_4 fuli = new fuli_4();
                boolean se = false;
                fuli.jTextField0.setText("0");
                fuli.jTextField1.setText("0");
                fuli.jTextField2.setText("0");
                fuli.run();
                if(fuli.jLabel9.getText()=="请正确输入数据在执行运算"){
                    se = true;
                }
                assertEquals(true,se);
            }

      (4)测试结果如下:

    如上图所示,测试结果通过

    而这时的运算结果为

    这时就可以解决除数为0的情况了

     全部代码已上传github,详情请点击:https://github.com/LanLeaf/Lan-work/tree/master/compounding_4.0-s-Test

  • 相关阅读:
    运算符
    数据类型
    试题汇总
    文件读写
    Python操作
    字符串常用函数 void
    向量叉乘求任意多边形面积,凹凸均可 void
    约瑟夫问题各种求解办法 void
    大数类相关计算(c语言版) void
    求解一元多次方程(迭代法) void
  • 原文地址:https://www.cnblogs.com/blueYE00/p/5330293.html
Copyright © 2020-2023  润新知