首页 > 代码库 > 四则运算单元测试
四则运算单元测试
对于四则运算中的单元测试以两个不同功能的函数为示例展示。仍然采用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
四则运算单元测试
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。