四则运算单元测试

  对于四则运算中的单元测试以两个不同功能的函数为示例展示。仍然采用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

[email protected]:muziliquan/classwork03.git

[email protected]:muziliquan/classwork03.git

时间: 2024-12-23 18:01:50

四则运算单元测试的相关文章

(第四周)四则运算单元测试

项目成员:黄兴.谢孝淼 程序代码 因为此前的程序只有一个主函数main(),为了做单元测试,把代码进行了一些修改,把源代码分到了几个方法里. 1.生成题目并计算的addQuestion()方法,其中把随机数和随机运算符都设成了固定值,这样是为了更容易的进行单元测试,除了这个方式,还没有想好怎样对随机数的方法进行测试. Scanner sc = new Scanner(System.in); //创建Scanner类的对象 double result=0; int right=0; //统计正确题

【week3】四则运算 单元测试

上一周的四则运算有bug,这次补充正确代码: 1 // 中缀转后缀 2 public String[] SolveOrder(String[] in, HashMap<String, Integer> precedence) { 3 // 符合逆波兰式(后缀)的输出 4 int kk=in.length; 5 String out[] = new String[kk]; 6 int p = 0 ; 7 // 操作符 8 Stack<String> ops = new Stack&l

四则运算——单元测试(测试方法:Right-BICEP )

一.测试的具体部位 Right-结果是否正确? B-是否所有的边界条件都是正确的? I-能查一下反向关联吗? C-能用其他手段交叉检查一下结果吗? E-你是否可以强制错误条件发生? P-是否满足性能要求? 二.测试结果 1.结果正确 2.边界条件 由上图可知,结果正确,但对于输入0值可以进行改进,让其直接不进行下列判断 3.一致性 数值范围大时,无余数的式子出现概率少 4.区间性 本程序,取值范围设置为int型,所以出题数目和出题数值都可以设很大 5.存在性 数值范围为0,产生未处理异常,此处程

四则运算—单元测试

思路:编写的程序只有一个主函数,并且每个要求的实现方式都是一层层嵌套的,也都是使用同样的方法,先用while对不符合的输入进行提示,再用if...else...分支结构选择.所以则以(是否有乘除法—是否是否有负数—数值范围—打印方式—输出题目)为单元进行测试. 按照BICEP原则: Right-结果是否正确? B-是否所有的边界条件都是正确的? I-能查一下反向关联吗? C-能用其他手段交叉检查一下结果吗? E-你是否可以强制错误条件发生? P-是否满足性能要求? 源代码: #include<i

四则运算--单元测试

(1)初步测试,进行进行判断,输入数据:5 100 1 0 0 0 1 (2)判断乘除变化时,结果是否正确 输入数据:5 100 1 1 0 0 1 (3)当输入的题目数为负数时,判断结果 输入数据:-10 100 1 0 0 1 0 (4)当数值过大时,计算的数值仍然合理 输入数据:10 2000 1 0 0 0 1 (5)当运算数为0时,没有运算式产生,输入数据:5 0 1 0 0 0 1 (6)当用户输入没有按照要求时,无运算式产生 输入数据:5 10 12 1 0 0 1

软件工程——四则运算单元测试(是否有乘除法)

首先找了一组比较大的数测试了一下稳定性: 下面是没有乘除法给出而结果: 有乘除法的结果:

软件工程课堂练习--四则运算单元测试

一.测试计划 对系统所要实现的功能以及程序中的函数进行针对性的测试, 1.输入出题数目,看出题数目是否正确: 2.用户首先要选择有无负数参与运算,分别用[0/1]是或否表示,分别输入[0/1]看是否有无负数出现:其次如若输入其他字符或数字,则显示提示要求用户重新输入: 3.然后用户根据提示输入是否有无乘除法,测试方法同上: 4.测试用户在重复多次操作时是否会有重复运算出现: 5.输入出题数目,选择打印列数,看是否存在问题: 二.测试执行及结果 1.输入30道题目测试有30道输出,然后用分别测试了

随机产生30道四则运算的程序单元测试

四则运算单元测试 一.测试计划: 分模块进行测试,测试各部分模块功能是否能够实现,是否能够独立运行,是否能够实现重复允许,是否有报错处理等. (1)在面对是否有乘除法运算时,输入“0”表示没有乘除法运算,输入“1”表示有乘除法运算,当输入其他数字时,则报错,要求重新输入: (2)在所有的“N”份题都含有乘除法运算时,测试有负数有余数.有负数无余数.无负数有余数.无负数无余数这4种情况下对应的结果是否符合条件(题目的份数N为用户设定),在输入的数值为0或1之外的数值,则默认为1: (3)在所有的“

每周例行报告——第三周

<待完善> 项目:词频统计——单元测试  项目类型:个人项目 项目完成情况:已完成 项目日期:2016.9.26 项目改进:2016.9.27 C类别 C内容 S开始时间 E结束时间 I间隔 T净时间 P预计时间 分析 设计  10:20  10:30  0  10  20 学习 查阅资料  10:30  11:00  10  20  20 测试 练习Junit  13:20  15:00  10  90  180 编码 实现  15:30  17:00  0  90  120   改进  1