景区为了吸引游客,提出优惠政策,需根据淡旺季月份和游客身份计算出缆车乘车费
用,具体规则如下:
❖
乘坐缆车原价为 100 元;
❖
每年的 1 月、2 月、6 月、7 月、8 月、12 月为旺季,乘车费用为原价打 8 折;
- 若游客是学生,再打 7 折,最终优惠票价为 56 元;
- 若游客是教师,再打 8 折,最终优惠票价为 64 元;
- 其他游客,再无折扣,最终优惠票价为 80 元。
❖
每年的 3 月、4 月、5 月、9 月、10 月、11 月为淡季,乘车费用为原价打 6 折;
- 若游客是学生,再打 7 折,最终优惠票价为 42 元;
- 若游客是教师,再打 8 折,最终优惠票价为 48 元;
- 其他游客,再无折扣,最终优惠票价为 60 元。
❖
若月份不是 1~12 月的话,系统则显示月份异常。
【题目描述】
请使用“
分支覆盖法
”对被测源代码 LiftTicket 类中的 fareCalculation()方法设计单
元测试用例。并在 LiftTicketTest 类中完成 Java 单元测试代码。
分支覆盖法
:又叫判定覆盖法,是指设计适当数量的测试用例运行被测程序,使得程序中
每个判定语句的真、假分支至少被执行一次。
package cn.lanqiao;
import java.text.DecimalFormat;
/**
* 本类主要功能描述:
* 1、乘坐缆车原价为 100 元。
* 2、每年的 1 月,2 月,6 月,7 月,8 月,12 月为旺季,乘车费用在原价基础上打8折;若游客是学生,再打7折,最终优惠票价为56元;若游客是教师,再打8折,最终优惠票价为64元;其他游客,再无折扣,最终优惠票价为80元。
* 3、每年的 3 月,4 月,5 月,9 月,10 月,11 月为淡季,乘车费用在原价基础上打6折;若游客是学生,再打7折,最终优惠票价为42元;若游客是教师,再打8折,最终优惠票价为48元;其他游客,再无折扣,最终优惠票价为60元。
* 4、若月份不是 1 ~ 12 月的话,系统则显示月份异常。
*/
public class LiftTicket {
/**
* 根据月份和游客身份计算出缆车乘车费用
* @param month 月份
* @param identity 身份
* @return 最终票价
*/
public String fareCalculation(int month, String identity){
// 原价
double price = 100;
if(month == 1 || month == 2 || month == 6 ||month == 7 || month == 8 || month == 12){
if(identity.equals("学生")){
price=price * 0.8 * 0.7;
}else if(identity.equals("教师")){
price=price * 0.8 * 0.8;
}else{
price=price * 0.8;
}
return DecimalFormat.getIntegerInstance().format(price);
}else if(month == 3 || month == 4 || month == 5 || month == 9 || month == 10 || month == 11){
if(identity.equals("学生")){
price=price * 0.6 * 0.7;
}else if(identity.equals("教师")){
price=price * 0.6 * 0.8;
}else{
price=price * 0.6;
}
return DecimalFormat.getIntegerInstance().format(price);
}else{
return "月份异常";
}
}
}
package cn.lanqiao.unit;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import cn.lanqiao.LiftTicket;
/**
* 1. 请使用判定覆盖法对被测源代码 LiftTicket 类中的 fareCalculation 方法设计 7 条单元测试用例。
* 2. 请在下方 LiftTicketTest 类中填写单元测试代码内容。
* 3. 在测试中用到的断言 Assert 类务必使用 org.junit 包中的 Assert 。
*/
public class LiftTicketTest {
// 声明被测类
private LiftTicket ticket;
@Before
public void setUp(){
// 创建被测类实例
ticket = new LiftTicket();
}
@After
public void tearDown(){
// 释放被测类实例
ticket = null;
}
@Test
public void testFareCalculation01(){
// TODO 请填写单元测试代码
Assert.assertEquals("56", ticket.fareCalculation(1,"学生"));
Assert.assertEquals("64", ticket.fareCalculation(1,"教师"));
Assert.assertEquals("80", ticket.fareCalculation(1,"司机"));
}
@Test
public void testFareCalculation02(){
// TODO 请填写单元测试代码
Assert.assertEquals("42", ticket.fareCalculation(3,"学生"));
Assert.assertEquals("48", ticket.fareCalculation(3,"教师"));
Assert.assertEquals("60", ticket.fareCalculation(3,"司机"));
}
@Test
public void testFareCalculation03(){
// TODO 请填写单元测试代码
Assert.assertEquals("月份异常", ticket.fareCalculation(14,"司机"));
}
}