Visual Studio 单元测试的简单应用

写在前面

  笔者根据作业的介绍以及Visual Studio 2017 文档的相关说明,进行了Visual Studio 单元测试的简单应用。

Tips Link
课程链接 2019春季计算机学院软件工程(罗杰)(北京航空航天大学)
实验作业链接 [2019BUAA软工助教]第0次代码作业
实验成果连接 GitHub
参考文献 Visual Studio 2017 文档

单元测试代码

  单元测试从以下三方面展开:

  1. 四则运算正确性;
  2. 四则运算组合后计算的正确性;
  3. 要求范围内所有整数运算的正确性;
#include "stdafx.h"
#include "CppUnitTest.h"
#include "../Calculator/Calculator.h"using namespace Microsoft::VisualStudio::CppUnitTestFramework;namespace CalculatorUnitTest
{       TEST_CLASS(Test){public:Calculator* calc;TEST_METHOD_INITIALIZE(initCal) {calc = new Calculator();}TEST_METHOD_CLEANUP(CleanCal){delete calc;calc = NULL;}/*简单测试*/TEST_METHOD(SimpleADD){string ret = calc->Solve("11+22");Assert::AreEqual(ret, (string)"11+22=33");}TEST_METHOD(SimpleSUB){string ret = calc->Solve("77-33");Assert::AreEqual(ret, (string)"77-33=44");}TEST_METHOD(SimpleMUL){string ret = calc->Solve("55*66");Assert::AreEqual(ret, (string)"55*66=3630");}TEST_METHOD(SimpleDIV){string ret = calc->Solve("99/33");Assert::AreEqual(ret, (string)"99/33=3");}/*组合测试*/TEST_METHOD(ADD_ADD){string ret = calc->Solve("22+33+11");Assert::AreEqual(ret, (string)"22+33+11=66");}TEST_METHOD(ADD_SUB){string ret = calc->Solve("22+33-11");Assert::AreEqual(ret, (string)"22+33-11=44");}TEST_METHOD(ADD_MUL){string ret = calc->Solve("22+33*11");Assert::AreEqual(ret, (string)"22+33*11=385");}TEST_METHOD(ADD_DIV){string ret = calc->Solve("22+33/11");Assert::AreEqual(ret, (string)"22+33/11=25");}TEST_METHOD(SUB_ADD){string ret = calc->Solve("99-66+77");Assert::AreEqual(ret, (string)"99-66+77=110");}TEST_METHOD(SUB_SUB){string ret = calc->Solve("99-22-55");Assert::AreEqual(ret, (string)"99-22-55=22");}TEST_METHOD(SUB_MUL){string ret = calc->Solve("77-6*11");Assert::AreEqual(ret, (string)"77-6*11=11");}TEST_METHOD(SUB_DIV){string ret = calc->Solve("77-88/2");Assert::AreEqual(ret, (string)"77-88/2=33");}TEST_METHOD(MUL_ADD){string ret = calc->Solve("22*33+11");Assert::AreEqual(ret, (string)"22*33+11=737");}TEST_METHOD(MUL_SUB){string ret = calc->Solve("22*33-11");Assert::AreEqual(ret, (string)"22*33-11=715");}TEST_METHOD(MUL_MUL){string ret = calc->Solve("22*33*99");Assert::AreEqual(ret, (string)"22*33*99=71874");}TEST_METHOD(MUL_DIV){string ret = calc->Solve("22*33/11");Assert::AreEqual(ret, (string)"22*33/11=66");}TEST_METHOD(DIV_ADD){string ret = calc->Solve("99/9+11");Assert::AreEqual(ret, (string)"99/9+11=22");}TEST_METHOD(DIV_SUB){string ret = calc->Solve("99/9-10");Assert::AreEqual(ret, (string)"99/9-10=1");}TEST_METHOD(DIV_MUL){string ret = calc->Solve("99/9*22");Assert::AreEqual(ret, (string)"99/9*22=242");}TEST_METHOD(DIV_DIV){string ret = calc->Solve("99/9/11");Assert::AreEqual(ret, (string)"99/9/11=1");}/*运算数长度*/TEST_METHOD(Length_1){string ret = calc->Solve("9/3*2+8");Assert::AreEqual(ret, (string)"9/3*2+8=14");}TEST_METHOD(Length_2){string ret = calc->Solve("90/3*22+8");Assert::AreEqual(ret, (string)"90/3*22+8=668");}TEST_METHOD(Length_3){string ret = calc->Solve("90/30*2+89");Assert::AreEqual(ret, (string)"90/30*2+89=95");}};}

Bug修复

  经过调试,对源程序的以下三个部分进行修复。

string Calculator::Solve(string formula) {vector<string>* tempStack = new vector<string>();stack<char>* operatorStack = new stack<char>();int len = formula.length();int k = 0;for (int j = -1; j < len - 1; j++) {char formulaChar = formula[j + 1];if (j == len - 2 || formulaChar == '+' || formulaChar == '-' ||formulaChar == '*' || formulaChar == '/') {if (j == len - 2) {tempStack->push_back(formula.substr(k));}else {if (k <= j) {   // 判断条件错误:k < j ===> k <= j/*substr 使用错误:tempStack->push_back(formula.substr(k, j + 1));*//*----------修改后----------*/tempStack->push_back(formula.substr(k, j - k + 1)); /*--------------------------*/}if (operatorStack->empty()) {operatorStack->push(formulaChar);}else {char stackChar = operatorStack->top();if ((stackChar == '+' || stackChar == '-')&& (formulaChar == '*' || formulaChar == '/')) {operatorStack->push(formulaChar);}else {/*to_string 使用错误:tempStack->push_back(to_string(operatorStack->top()));  *//*----------修改后----------*/string tempOp(1, operatorStack->top());tempStack->push_back(tempOp);/*--------------------------*/operatorStack->pop();operatorStack->push(formulaChar);}}}k = j + 2;}}
// 以下略。
  • 错误一导致一位数计算时无法将字符串中的数字截取插入临时栈(tempStack)。
  • 错误二导致截取数字时截取到错误的长度的子串。
  • 错误三会将运算符转换为相应的ASCII码,导致插入临时栈的为数字字符串而非运算符字符串。

转载于:https://www.cnblogs.com/Cookize/p/10440029.html

[2019BUAA软工]第0次代码作业相关推荐

  1. [2017BUAA软工]第0次个人作业

    第一部分:结缘计算机 你为什么选择计算机专业?你认为你的条件如何?和这些博主比呢? 相对于那些高考完通过简单辨析各个专业的名字,分析各个专业分数线高低后"随性"选择专业的同学来说, ...

  2. 2021秋软工实践第一次结对编程作业

    这个作业属于哪个课程 构建之法-2021秋-福州大学软件工程 这个作业要求在哪里 2021秋软工实践第一次结对编程作业 这个作业的目标 实现博饼软件原型并进行博客写作 学号 031902139 队友学 ...

  3. 软工1816 · 第七次作业 - 需求分析报告

    软工1816 · 第七次作业 - 需求分析报告 组长本次作业的博客 评审表 <需求规格说明书> 成员分工明细以及TODO-list 负责人 分工明细 TODO-list 白晨曦 1.规划项 ...

  4. 软工实践第七次作业- 需求分析报告(第五组)

    软工1816 · 第七次作业 - 需求分析报告 组长本次作业的博客 评审表 <需求规格说明书> 成员分工明细以及TODO-list 负责人 分工明细 TODO-list 白晨曦 1.规划项 ...

  5. 软工实践第八次作业(软件工程实践总结)

    原博客 目录 一.请回望暑假时的第一次作业,你对于软件工程课程的想象 二.个人或结对或团队项目实践中的经验总结+实例/例证结合的分析 三.对下一届实践的建议和告知.对于后来人的期许. 四.分析一下自己 ...

  6. 2022秋软工实践 第一次结对编程作业

    2022秋软工实践 第一次结对编程作业 需求分析 (1)Need,需求 (2)Approach,做法 (3)Benfit,好处 (4)Competitors,竞争 (5)Delivery,推广 UML ...

  7. 软工实践第三次作业-结对项目1

    软工实践第三次作业-结对项目1 简要目录: Step1 · 结对信息     成员信息     项目简介 Step2 · 项目信息     设计说明     原型模型 Step3 · 结对过程     ...

  8. 福大软工1816 · 第三次作业 - 结对项目1

    软工实践第三次作业-结对项目1 简要目录: Step1 · 结对信息     成员信息     项目简介 Step2 · 项目信息     设计说明     原型模型 Step3 · 结对过程     ...

  9. 软工实践 - 第六次作业

    软工1816 · 第六次作业 - 团队选题报告 组长本次作业的博客 NABCD模型 Need: 这个想法来源于生活,目前市面上的闹钟,只是针对个人的时间提醒设置.而我们的这个想法是在两个及以上的人数共 ...

  10. 软工实践第六次作业——团队选题报告

    软工1816 · 第六次作业 - 团队选题报告 组长本次作业的博客 NABCD模型 Need: 这个想法来源于生活,目前市面上的闹钟,只是针对个人的时间提醒设置.而我们的这个想法是在两个及以上的人数共 ...

最新文章

  1. pandas使用str函数和startswith函数,筛选dataframe中(start with)以特定前缀开头的数据列(selecting columns begin with certain
  2. 【DIY】RGB光立方
  3. 【DIY】送给儿子的感应小夜灯,DIY小夜灯
  4. 很慌!一次惊心动魄的服务器误删文件的恢复过程
  5. Java中的三目运算符
  6. 「拼房」你敢吗?这款App这样玩「陌生人社交」
  7. 科学计算:Python VS. MATLAB(3)----线性代数基础
  8. Oracle优化检查表
  9. 项目管理(3):备战pmp
  10. python 当前时间减一个月_python排序了解一下
  11. Font Configuration and Customization for Open Source Systems - 白皮书翻译和深入
  12. ON DUPLICATE KEY UPDATE单个增加更新及批量增加更新的sql
  13. Windows服务简单实例
  14. 8-过滤器Filter和监听器Listener
  15. BDFZOI 数论小结1(筛法、欧拉phi函数)
  16. 合并排序时间复杂度推导
  17. VS2012安装部署教程
  18. 漫画解读软件开发模式
  19. HTML下拉菜单代码实现
  20. LS-DYNA系列_Mie-Gruneisen状态方程

热门文章

  1. python center用法_【语言学习】python——字符串
  2. 判断中文文本是否为utf8编码类型的javascript实现_Go语言实现LeetCode算法:393 UTF-8编码校验...
  3. latex 设置表格的字体大小和行高
  4. kubernetes 查看日志方法
  5. 基于springboot+vue的房屋租赁系统(前后端分离)
  6. 花店橱窗布置问题(FLOWER)
  7. access mysql 升迁_随说秋色园从Access升迁到MSSQL过程
  8. cenos各个版本下载地址
  9. 阶段5 3.微服务项目【学成在线】_day04 页面静态化_17-页面静态化-模板管理-GridFS研究-存文件...
  10. HTTP和HTTPS笔记