博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
软件工程第四周作业 - 单元测试
阅读量:5025 次
发布时间:2019-06-12

本文共 4649 字,大约阅读时间需要 15 分钟。

单元测试内容:

  • 生成试题
  • 中缀表达式转后缀表达式并计算

代码地址:

结对成员:@刘耀泽


生成试题

  测试用例(一)

  传入参数:
    参数1:string num1 = "10"; //第一个操作数
    参数2:string num2 = "20"; //第二个操作数
    参数3:string op = "*"; //运算符
    参数4:int flag = 1; //随机数,用来随机括号的位置
    参数5:ref int res = 60; //前一次生成的试题的计算结果
    参数6:ref int bracket = 1; //前一次试题是否生成括号
  期待结果:
    string str = "10 * 20";

  测试代码

   

  测试结果:通过。

  

  测试用例(二)

  传入参数:
    参数1:int num11 = 60; //第一个操作数的int值
    参数2:string num1 = "50"; //第一个操作数
    参数3:string num2 = "30"; //第二个操作数
    参数4:string op = "*"; //运算符
    参数5:int flag = 0; //随机数,用来随机括号的位置
    参数6:ref int res = 60; //前一次生成的试题的计算结果
    参数7:ref int bracket = 0; //前一次试题是否生成括号
  期待结果:
    string str = "( 50 + 30 )";

  测试代码

  

  测试结果:通过。

  

实现代码如下:

/// /// 生成试题/// /// 操作数1/// 操作数2/// 操作符/// 随机数/// 上次生成试题的结果/// 上次是否生成括号/// 
试题字符串
public static string CreateString(string num1, string num2, string op, int flag, ref int res, ref int bracket){ Random rand = new Random(); string str; if (op == "+" || op == "-") { if (flag == 0) { str = "( " + num1 + " " + op + " " + num2 + " )"; res = calc(Convert.ToInt32(num2), Convert.ToInt32(num1), op); } else if (flag == 1) { str = "( " + num2 + " " + op + " " + num1 + " )"; res = calc(Convert.ToInt32(num2), Convert.ToInt32(num1), op); } else { str = num1 + " " + op + " " + num2; res = calc(Convert.ToInt32(num2), Convert.ToInt32(num1), op); bracket = 0; } } else { if (op == "/") { while (Convert.ToInt32(num1) % Convert.ToInt32(num2) != 0) { num2 = rand.Next(1, 100).ToString(); } } str = num1 + " " + op + " " + num2; res = calc(Convert.ToInt32(num2), Convert.ToInt32(num1), op); } return str;}/// /// 生成试题/// /// 操作数1的int值/// 操作数1/// 操作数2/// 操作符/// 随机数/// 上次生成试题的结果/// 上次是否生成括号///
试题字符串
public static string CreateString(int num11, string num1, string num2, string op, int flag, ref int res, int bracket){ Random rand = new Random(); string str; if (op == "+" || op == "-") { if (flag == 0) { str = "( " + num1 + " " + op + " " + num2 + " )"; res = calc(Convert.ToInt32(num2), res, op); } else if (flag == 1) { str = "( " + num2 + " " + op + " " + num1 + " )"; res = calc(Convert.ToInt32(num2), res, op); } else { str = num1 + " " + op + " " + num2; res = calc(Convert.ToInt32(num2), res, op); bracket = 0; } } else { if (op == "/") { if (bracket == 1) { while (res % Convert.ToInt32(num2) != 0) { num2 = rand.Next(1, 100).ToString(); } } else { while (num11 % Convert.ToInt32(num2) != 0) { num2 = rand.Next(1, 100).ToString(); } } } str = num1 + " " + op + " " + num2; res = calc(Convert.ToInt32(num2), res, op); } return str;}

中缀表达式转后缀表达式并计算

  测试用例(一)

    传入参数:string zStr = "( 4 + 28 ) * 66 + 17"; //试题的中缀表达式
  期待结果:
    int res = 2095;

  测试代码

  

  测试结果:通过。

   

  测试用例(二)

    传入参数:string zStr = "32 + 16 * 52 - 17"; //试题的中缀表达式
  期待结果:
    int res = 847;

  测试代码

  

  测试结果:失败。应为: <847>,实际为: <-847>。

  经过查找,原因是因为在对后缀表达式进行计算的时候需弹出两个操作数进行计算,先弹出的操作数实际上是第二个数字,后弹出来的实际上是第一个数字,而我们想当然的将先弹出的数字当做第一操作数,后弹出的数字当做第二个操作数。测试用例(一)通过了是因为,测试用例一都是加法和乘法,即使是交换了位置也没有关系,而测试用例二里面有减法,如果交换的操作数的位置就会计算错误。

  测试用例(三)

    传入参数:string zStr = "35 * ( 42 + 75 ) / 5"; //试题的中缀表达式

  期待结果:
    int res = 819;

  测试代码

  

  测试结果:通过。

  

实现代码如下:

/// /// 中缀表达式转后缀表达式并计算/// /// 传入中缀表达式/// 
计算结果
public static int ChangeExpression(string zStr){ char a = ' '; String[] sp = zStr.Split(a);//字符串数组sp Stack st = new Stack(); //栈st Stack st1 = new Stack(); //int j = 0; int res = 0; for (int i = 0; i < sp.Length; i++) { if (sp[i] != "+" && sp[i] != "-" && sp[i] != "*" && sp[i] != "/" && sp[i] != "(" && sp[i] != ")") { st1.Push(sp[i]); //j++; } else { if (st.Count == 0 || IsPriority(sp[i], st.Peek().ToString()) == 1 || sp[i] == "(") { st.Push(sp[i]); } else { while (st.Count != 0) { if (st.Peek().ToString() != "(") { res = calc(Convert.ToInt32(st1.Pop().ToString()), Convert.ToInt32(st1.Pop().ToString()), st.Pop().ToString()); st1.Push(res); //j++; } else if (sp[i] != ")") { break; } else if (sp[i] == ")") { if (st.Peek().ToString() == "(") { st.Pop(); break; } else { res = calc(Convert.ToInt32(st1.Pop().ToString()), Convert.ToInt32(st1.Pop().ToString()), st.Pop().ToString()); st1.Push(res); } } } if (sp[i] != ")") { st.Push(sp[i]); } } } } while (st.Count != 0) { res = calc(Convert.ToInt32(st1.Pop().ToString()), Convert.ToInt32(st1.Pop().ToString()), st.Pop().ToString()); st1.Push(res); //j++; } return res;}

 

转载于:https://www.cnblogs.com/vector121/p/7648240.html

你可能感兴趣的文章
Java SPI机制原理和使用场景
查看>>
web前端java script学习2017.7.18
查看>>
删除TXPlatform
查看>>
LaTex:图片排版
查看>>
并发访问超时的问题可能性(引用)
查看>>
中小团队基于Docker的Devops实践
查看>>
利用python打开摄像头并保存
查看>>
System函数的使用说明
查看>>
Selenium-测试对象操作之:获取浏览器滚动条滚动距离
查看>>
Linux下MySQL数据库安装与配置
查看>>
Extjs String转Json
查看>>
oracle入门(4)——少而常用的命令
查看>>
打印机设置(PrintDialog)、页面设置(PageSetupDialog) 及 RDLC报表如何选择指定打印机...
查看>>
Java 虚拟机部分面试题
查看>>
JS中 String/JSON 方法总结
查看>>
二叉树的遍历问题总结
查看>>
3.14-3.20周总结
查看>>
Spring之面向切面编程AOP
查看>>
MATLAB GUI程序设计中使文本框接收多行输入的方法
查看>>
全文检索-Elasticsearch (四) elasticsearch.net 客户端
查看>>