Thoughtworks笔试题
来源:互联网 发布:能看杂志的软件 编辑:程序博客网 时间:2024/06/06 17:18
一 、题目描述
已完成题目要求功能,并划分子函数
- splitData:输入给定字符串,进行合理切割,得出相应数据格式
- checkoutFormat:对输入子串进行合法性校验
- getIncome:获取收入,传递参数为人数,返回总收入
- getPayment:计算支出,传递参数日期,时间段,人数。返回总支出
- numArea:计算所需场地数,传入人数,返回需要预定的场地数
- generateSummary:主函数,实现计算总收益的功能
二 、分析实现
2.1 题目分析:
题目要求格式化输入日期、时间段、人数;载格式化输出日期、时间段、当天收入、支出、净收益。最后计算出总收入、总支出、总净收益。
分析题目条件得:
小明收入影响因素: 参加人数
小明支出影响因素:
1. 日期
2. 时间段
3. 参加人数(预定场地数)
小明净收益=收入-支出
2.2 实现思路:
首先主函数genergateSummary会调用checkoutFormat函数对输入数据进行合法性校验,如果输入数据不合法,会提示”input error!”只有输入数据合法时才会进行收支计算。
- splitData:传参输入数据,按照题目给出的数据格式进行字符串分割,“\n”分割出每一条数据,“ 空格”分割日期、时间、人数,返回每一条数据封装的一个对象:
{
date: data[0],
time: data[1],
peopleNum: data[2]
}
具体代码实现如下:
//spilt the user datafunction splitData(input) { let inputList = input.split('\n'); return inputList.map(function (item) { let data = item.split(' '); return { date: data[0], time: data[1], peopleNum: data[2] }; });}
- getIncome()获取收入函数,传入人数,与人均单价相乘即可具体代码实现:
function getIncome(num) { if (numArea(num) === 0) return 0; return num * 30;}
- getPayment()首先由日期判断是否是工作日,再结合相应时间段和所需场地数得出总支出。代码实现:
//a day outcomefunction getPayment(date, time, num) { const T = numArea(num); const sum = new Date(date).getDay(); const isWorkday = (sum !== 0 && sum !== 6); let dayCharge = []; let result = 0; for (let i = 9; i < 22; i++) { isWorkday ? i >= 9 && i < 12 && (dayCharge[i] = 30) : i >= 9 && i < 12 && (dayCharge[i] = 40); i >= 12 && i < 18 && (dayCharge[i] = 50); isWorkday && i >= 18 && i < 20 && (dayCharge[i] = 80); isWorkday && i >= 20 && i < 22 && (dayCharge[i] = 60); !isWorkday && i >= 18 && i < 22 && (dayCharge[i] = 60); } let start = parseInt(time.split('~')[0]); let end = parseInt(time.split('~')[1]); for (let i = start; i < end; i++) { result += dayCharge[i]; } return result * T;}
最后计算总收入-总支出=总收益。
三、测试运行
3.1 运行结果
项目目录结构:
说明:
- spec文件夹中getSummary_spec为测试脚本以及测试数据testdata.js
- src目录下为源码文件
3.2 测试本例单元测试框架为jsamine
jsamine的安装与测试
项目根目录下
npm install //安装依赖
npm test //测试
测试样例:
样例说明:利用expect(area).toEqual(result);
来测试比对运行结果area是否与应该得到的正确结果result相等。
本地测试结果:
说明:
本次作业利用webstorm
编写javascript
代码,node环境+jasmine
测试框架,在spec
中编写测试用例,分别对generateSummary.js
中6个函数splitData(),checkoutFormat(),getIncome(),getPayment(),numArea(),generateSummary()
进行了单元测,以检验其结果正确性。
在测试过程中,分别对每一个函数的输入输出做声明,再比较函数运行结果与预期结果是否一致,以达到测试目的。
本次测试用例覆盖6条样例输入输出
测试结果均已通过
- ThoughtWorks笔试题汇总
- Thoughtworks笔试题
- FizzBuzzWhizz Thoughtworks笔试题
- ThoughtWorks 的一道笔试题
- ThoughtWorks笔试题汇总 2016
- Thoughtworks笔试
- thoughtworks笔试整理
- thoughtworks笔试整理【转载】
- Thoughtworks
- Thoughtworks
- 一道ThoughtWorks的面试编程题
- ThoughtWorks CodeJam
- ThoughtWorks Offshore
- ThoughtWorks FizzBuzzWhizz
- ThoughtWorks待遇
- thoughtworks readme
- Thoughtworks Open Source Available
- 求职经历--ThoughtWorks
- 基于Python的Flask Web开发 笔记 (2)
- java基础--StringBuffer类常用方法以及案例
- ecshop 通过数据库触发器的方式同步用户账号密码,失败的问题
- 51nod1445 变色DNA【最短路】
- JavaScript四种函数调用方式
- Thoughtworks笔试题
- AndroidStudio 和 Gradle 总结
- 局域网内,两台计算机ping不通的原因分析
- strtok()函数的用法
- android4.0以上实现Mqtt客户端
- Java网络编程之服务器与客户端通信
- Unity3D - 代码模板的修改
- 什么样的前端组件比较合适
- 宏和函数的区别