蓝桥杯4期模拟单元测试解析
单元测试题目判定覆盖法设计测试用例蓝桥杯练习题目描述请使用判定分支覆盖法为被测源代码LiftTicket类中的fareCalculation()方法设计单元测试用例并在LiftTicketTest类中完成单元测试代码。基本路径法又称独立路径测试是在程序控制流图的基础上通过分析控制结构的环路复杂性导出基本可执行路径集合从而设计测试用例的方法。本题要求使用判定覆盖法。源代码功能景区为吸引游客推出缆车乘车费用优惠政策规则如下乘坐缆车原价为100 元。系统首先检查用户的消费金额是否大于 0本题未涉及消费金额检查实际代码中无此逻辑以给定代码为准。旺季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 月则返回“月份异常”。题目要求使用判定分支覆盖法设计7 条测试用例使被测代码的判定覆盖率达到 100%。使用 Java 单元测试框架JUnit编写测试代码。测试代码写在提供的LiftTicketTest.java类中。断言Assert类必须使用org.junit包中的Assert。不要修改所提供的文件名称和已有代码。被测源代码packagecn.lanqiao;importjava.text.DecimalFormat;publicclassLiftTicket{/** * 根据月份和游客身份计算出缆车乘车费用 * param month 月份 * param identity 身份 * return 最终票价 */publicStringfareCalculation(intmonth,Stringidentity){doubleprice100;if(month1||month2||month6||month7||month8||month12){if(identity.equals(学生)){priceprice*0.8*0.7;}elseif(identity.equals(教师)){priceprice*0.8*0.8;}else{priceprice*0.8;}returnDecimalFormat.getIntegerInstance().format(price);}elseif(month3||month4||month5||month9||month10||month11){if(identity.equals(学生)){priceprice*0.6*0.7;}elseif(identity.equals(教师)){priceprice*0.6*0.8;}else{priceprice*0.6;}returnDecimalFormat.getIntegerInstance().format(price);}else{return月份异常;}}}测试类代码LiftTicketTest.javapackagecn.lanqiao.unit;importorg.junit.After;importorg.junit.Before;importorg.junit.Test;importorg.junit.Assert;// 注意必须使用 org.junit.Assertimportcn.lanqiao.LiftTicket;publicclassLiftTicketTest{privateLiftTicketticket;BeforepublicvoidsetUp(){ticketnewLiftTicket();}AfterpublicvoidtearDown(){ticketnull;}// 旺季 - 学生TestpublicvoidtestFareCalculation01(){Assert.assertEquals(56,ticket.fareCalculation(7,学生));}// 旺季 - 教师TestpublicvoidtestFareCalculation02(){Assert.assertEquals(64,ticket.fareCalculation(7,教师));}// 旺季 - 其他TestpublicvoidtestFareCalculation03(){Assert.assertEquals(80,ticket.fareCalculation(7,其他));}// 淡季 - 其他TestpublicvoidtestFareCalculation04(){Assert.assertEquals(60,ticket.fareCalculation(3,其他));}// 淡季 - 学生TestpublicvoidtestFareCalculation05(){Assert.assertEquals(42,ticket.fareCalculation(3,学生));}// 淡季 - 教师TestpublicvoidtestFareCalculation06(){Assert.assertEquals(48,ticket.fareCalculation(3,教师));}// 无效月份TestpublicvoidtestFareCalculation07(){Assert.assertEquals(月份异常,ticket.fareCalculation(13,教师));}}判定覆盖分析测试用例月份身份预期结果覆盖的判定017旺季学生“56”旺季真学生判定真027旺季教师“64”旺季真学生假教师真037旺季其他“80”旺季真学生假教师假043淡季其他“60”旺季假淡季真内层学生假、教师假053淡季学生“42”旺季假淡季真内层学生真063淡季教师“48”旺季假淡季真内层学生假、教师真0713无效教师“月份异常”旺季假淡季假进入else分支结论7 条用例使所有判定外层月份分支、内层身份分支均取到真和假判定覆盖率达到 100%。注意事项断言必须使用org.junit.Assert不能使用junit.framework.Assert。测试类文件应放在正确的包路径下如test/cn/lanqiao/unit。不要修改被测类的任何代码。总结本题通过判定覆盖法设计了 7 个测试用例完整覆盖了旺季/淡季/异常月份以及学生/教师/其他身份的所有分支符合题目要求的 100% 判定覆盖率。