测试
测试代码-------211606360 丁培晖 211606343 杨宇潇
单元测试
测试思路
- 首先从有返回值,有传参的函数入手。测试返回值是否和预期值相等。
- 由于void函数无返回值,则通过设立flag检查测试,或者将void类型修改,改为有返回值的方法。我们将void类型的calculate_1,calculate_2,calculate_3修改为int类型,返回一个数值,用于判断生成题目数量是否和符合传入的参数,同时也检测该程序是否成功运行。
- 将某些方法忽略。
部分测试代码
- 在测试方法传入参数格式,通过assertEquals进行对比,可以得出测试是否成功。
- 测试要调用的方法需为public类,否则无法测试。
@Test //测试优先级的判断是否正确
public void testLevel_1() {
String operation = "+";
assertEquals(1, MathExam6360.Level(operation));
}
@Test //测试传入的参数格式是否正确
public void testMathExam_1(){
String[] str = new String[] {"-n", "10", "-grade", "3"};
assertEquals(true,MathExam6360.MathExam(str));
}
@Test //测试传入的题目数量和年级是否符合大小限定以及格式
public void testJudge_1() {
String count = "10";
String grade = "3";
assertEquals(true,MathExam6360.judge(count, grade));
}
代码覆盖率
结构优化
uml图
流程图
重构
- 将一二年级的算法进行优化,使其能够使用中序表达式与逆波兰。
- 在reckon里面添加了对计算数据的判断,比如出现负数时,返回false的字符串,通过字符匹配,重新对式子进行修改。
- 在得出结果后,对答案进行限制,限制于10000以内。
- calculate()方法:对传入的年级进行判断,然后调用相关年级的式子生成方法,如:calculate_1,calculate_2,calculate_3。
Level()方法:对符号的优先级进行判断,并返回int类型值。
性能调优
-
程序性能瓶颈:
- 代码冗余 ,无法有效运行。
-
优化方案:
- 将重复操作的代码进行删减。
- 将多余的参数去除。
效能分析截图
优化前
优化后
总结
- 这次进行了单元测试,对传入参数的格式、大小进行测试,同时检测调用的方法是否成功运行。
- 第一次写测试代码,通过慕课视频,粗略了解了测试代码的格式、写法,其实测试代码并没有以前想的那么高大上,毕竟它不能判断你是对的,只能判断你没有错。
- 每测试一个方法,都需要对方法进行修改,根据情况,选择使用返回值或者设立flag等方式,来进行测试。而基础薄弱我们,算是从0开始,一点一点汲取博客里的经验,渐渐写出了现在的程序。