[2019BUAA软工]第0次代码作业
Visual Studio 单元测试的简单应用
写在前面
笔者根据作业的介绍以及Visual Studio 2017 文档的相关说明,进行了Visual Studio 单元测试的简单应用。
Tips | Link |
---|---|
课程链接 | 2019春季计算机学院软件工程(罗杰)(北京航空航天大学) |
实验作业链接 | [2019BUAA软工助教]第0次代码作业 |
实验成果连接 | GitHub |
参考文献 | Visual Studio 2017 文档 |
单元测试代码
单元测试从以下三方面展开:
- 四则运算正确性;
- 四则运算组合后计算的正确性;
- 要求范围内所有整数运算的正确性;
#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次代码作业相关推荐
- [2017BUAA软工]第0次个人作业
第一部分:结缘计算机 你为什么选择计算机专业?你认为你的条件如何?和这些博主比呢? 相对于那些高考完通过简单辨析各个专业的名字,分析各个专业分数线高低后"随性"选择专业的同学来说, ...
- 2021秋软工实践第一次结对编程作业
这个作业属于哪个课程 构建之法-2021秋-福州大学软件工程 这个作业要求在哪里 2021秋软工实践第一次结对编程作业 这个作业的目标 实现博饼软件原型并进行博客写作 学号 031902139 队友学 ...
- 软工1816 · 第七次作业 - 需求分析报告
软工1816 · 第七次作业 - 需求分析报告 组长本次作业的博客 评审表 <需求规格说明书> 成员分工明细以及TODO-list 负责人 分工明细 TODO-list 白晨曦 1.规划项 ...
- 软工实践第七次作业- 需求分析报告(第五组)
软工1816 · 第七次作业 - 需求分析报告 组长本次作业的博客 评审表 <需求规格说明书> 成员分工明细以及TODO-list 负责人 分工明细 TODO-list 白晨曦 1.规划项 ...
- 软工实践第八次作业(软件工程实践总结)
原博客 目录 一.请回望暑假时的第一次作业,你对于软件工程课程的想象 二.个人或结对或团队项目实践中的经验总结+实例/例证结合的分析 三.对下一届实践的建议和告知.对于后来人的期许. 四.分析一下自己 ...
- 2022秋软工实践 第一次结对编程作业
2022秋软工实践 第一次结对编程作业 需求分析 (1)Need,需求 (2)Approach,做法 (3)Benfit,好处 (4)Competitors,竞争 (5)Delivery,推广 UML ...
- 软工实践第三次作业-结对项目1
软工实践第三次作业-结对项目1 简要目录: Step1 · 结对信息 成员信息 项目简介 Step2 · 项目信息 设计说明 原型模型 Step3 · 结对过程 ...
- 福大软工1816 · 第三次作业 - 结对项目1
软工实践第三次作业-结对项目1 简要目录: Step1 · 结对信息 成员信息 项目简介 Step2 · 项目信息 设计说明 原型模型 Step3 · 结对过程 ...
- 软工实践 - 第六次作业
软工1816 · 第六次作业 - 团队选题报告 组长本次作业的博客 NABCD模型 Need: 这个想法来源于生活,目前市面上的闹钟,只是针对个人的时间提醒设置.而我们的这个想法是在两个及以上的人数共 ...
- 软工实践第六次作业——团队选题报告
软工1816 · 第六次作业 - 团队选题报告 组长本次作业的博客 NABCD模型 Need: 这个想法来源于生活,目前市面上的闹钟,只是针对个人的时间提醒设置.而我们的这个想法是在两个及以上的人数共 ...
最新文章
- pandas使用str函数和startswith函数,筛选dataframe中(start with)以特定前缀开头的数据列(selecting columns begin with certain
- 【DIY】RGB光立方
- 【DIY】送给儿子的感应小夜灯,DIY小夜灯
- 很慌!一次惊心动魄的服务器误删文件的恢复过程
- Java中的三目运算符
- 「拼房」你敢吗?这款App这样玩「陌生人社交」
- 科学计算:Python VS. MATLAB(3)----线性代数基础
- Oracle优化检查表
- 项目管理(3):备战pmp
- python 当前时间减一个月_python排序了解一下
- Font Configuration and Customization for Open Source Systems - 白皮书翻译和深入
- ON DUPLICATE KEY UPDATE单个增加更新及批量增加更新的sql
- Windows服务简单实例
- 8-过滤器Filter和监听器Listener
- BDFZOI 数论小结1(筛法、欧拉phi函数)
- 合并排序时间复杂度推导
- VS2012安装部署教程
- 漫画解读软件开发模式
- HTML下拉菜单代码实现
- LS-DYNA系列_Mie-Gruneisen状态方程
热门文章
- python center用法_【语言学习】python——字符串
- 判断中文文本是否为utf8编码类型的javascript实现_Go语言实现LeetCode算法:393 UTF-8编码校验...
- latex 设置表格的字体大小和行高
- kubernetes 查看日志方法
- 基于springboot+vue的房屋租赁系统(前后端分离)
- 花店橱窗布置问题(FLOWER)
- access mysql 升迁_随说秋色园从Access升迁到MSSQL过程
- cenos各个版本下载地址
- 阶段5 3.微服务项目【学成在线】_day04 页面静态化_17-页面静态化-模板管理-GridFS研究-存文件...
- HTTP和HTTPS笔记