要求:

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

   有哪些场景?

   期待的返回值

   写测试程序。

   运行测试。

 

测试内容: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

posted on 2016-03-28 19:39  bububulan  阅读(306)  评论(3编辑  收藏  举报