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条样例输入输出
测试结果均已通过

0 0
原创粉丝点击