首页 > 代码库 > 四则运算单元测试

四则运算单元测试

  对于四则运算中的单元测试以两个不同功能的函数为示例展示。仍然采用JUnit4的单元测试框架

  下面展示的是没有括号和分数情况下的计算函数 doCalculation的代码片段

// 对生成的4则运算进行计算    public static Double doCalculation(String formula) {        ArrayList<Double> numList = new ArrayList<Double>();// 存储运算数        ArrayList<String> opList = new ArrayList<String>();// 存储运算符        int opIndex = 0;// 定位运算符的位置        int preIndex = 0;// 紧挨运算符左边数字的起始位置        for (char s : formula.toCharArray()) {            if (s == ‘+‘ || s == ‘-‘ || s == ‘*‘ || s == ‘/‘) {                numList.add(Double.parseDouble(formula.substring(preIndex, opIndex)));                opList.add("" + s);                preIndex = opIndex + 1;            }            opIndex++;        }        numList.add(Double.parseDouble(formula.substring(preIndex)));         // 下面的for循环用来先计算*/法        for (opIndex = 0; opIndex < opList.size(); opIndex++) {            switch (opList.get(opIndex)) {            case "*":                numList.add(opIndex, numList.get(opIndex) * numList.get(opIndex + 1));                numList.remove(opIndex + 1);                numList.remove(opIndex + 1);                opList.remove(opIndex);                opIndex = -1;                break;            case "/":                numList.add(opIndex, numList.get(opIndex) / numList.get(opIndex + 1));                numList.remove(opIndex + 1);                numList.remove(opIndex + 1);                opList.remove(opIndex);                opIndex = -1;                break;            }        }         // 下面的for循环用来先计算+-法        for (opIndex = 0; opIndex < opList.size(); opIndex++) {            switch (opList.get(opIndex)) {            case "+":                numList.add(opIndex, numList.get(opIndex) + numList.get(opIndex + 1));                numList.remove(opIndex + 1);                numList.remove(opIndex + 1);                opList.remove(opIndex);                opIndex = -1;                break;            case "-":                numList.add(opIndex, numList.get(opIndex) - numList.get(opIndex + 1));                numList.remove(opIndex + 1);                numList.remove(opIndex + 1);                opList.remove(opIndex);                opIndex = -1;                break;            }        }        return numList.get(0).doubleValue();    } 

下面是单元测试函数的代码

@RunWith(Parameterized.class)public class CalculateMachine01Test {    private String param;;    private Double result;    public CalculateMachine01Test(String param,double result){        this.param=param;        this.result=result;    }        @Parameters      public static Collection data(){    //下面是一些测试样例        return Arrays.asList(new Object[][]{              {"1+2",3},             {"1+2*3/4",2.5},            {"1/0",-1},              {"1/3",0.3},      });      }            @Test      public void calTest() {          CalculateMachine01 cm=new CalculateMachine01();        Double temp=cm.doCalculation(param);     // Assert.assertEquals(result, temp);  //对比期望的结果和实际执行的结果        Assert.assertEquals(temp, result);    }  }

测试结果如下

技术分享

其中第三行数据{"1/0",-1}和第四行数据{"1/3",0.3}未通过测试。但是这种示例可以再处理结果的的函数中过滤掉。

针对函数之间有依赖有关mock的的暂时没做。

感悟:单元测试感觉简单,实则不易。

 

类别

内容

开始时间

结束时间

间断时间

净时间

学习

对mock和stub的研究

18:33

19:23

4

46

测试编码

四则算式的函数测试

19:30

20:40

20

50

总结

mock的具体用法尚不明确,没有很好的例子

20:40

20:45

0

5

 

https://git.coding.net/muziliquan/classwork03.git

git@git.coding.net:muziliquan/classwork03.git

git@git.coding.net:muziliquan/classwork03.git

 

四则运算单元测试