作业3-单元测试

一、单元测试


1.设计思路

  • 固定返回值的函数通过对比与预期结果是否一致进行测试判断

  • 随机返回值的函数通过对比是否在预期结果范围内进行测试判断
  • 调度场算法通过函数异常中转进行测试判断

2.部分代码

import static org.junit.Assert.*;

import org.junit.Test;

public class ParameterTest {

    @Test
    public void DealData() {
        String[] args = {"-n","10","-Grade","3"};
        //assertTrue测试boolean
        assertTrue(new Parameter(args).DealData(args));
    }
    @Test
    public void GetNumber() {
        String[] args = {"-n","10","-Grade","3"};
        //assertEquals测试boolean,long,int等
        assertEquals(10, new Parameter(args).GetNumber());
    }
    @Test
    public void GetGrade() {
        String[] args = {"-n","10","-Grade","3"};
        //assertEquals测试boolean,long,int等
        assertEquals(3, new Parameter(args).GetGrade());
    }
}

3.测试覆盖率

avatar

二、结构优化


1.UML类图

avatar

2.运行流程图

暂无

3.代码重构

(1)重构部分

  • 题目生成
  • 参数处理

(2)重构原因

  • 便于单元测试
  • 代码模块化
  • 增加代码耦合度

(3)当前模块功能

  • MathExam为主类,用于接收参数
  • File为文件类,用于写出文件
  • Parameter为参数处理类,用于检查接收到的参数是否合格并进行处理
  • ShuntingYard为调度场算法类,用于实现调度场算法,计算表达式结果
  • TaskMake为题目生成类,用于随机生成题目

三、性能调优


1.优化前效能分析

avatar

2.性能瓶颈

  • String.toArray()方法处理效率较低

3.解决方案

  • 使用String.charAt(index)方法替代

4.优化后效能分析

avatar

四、总结


  • 同类功能的函数应该封装到同一个类中

  • 多次使用的方法封装为函数,减少代码量,且代码美观

猜你喜欢

转载自www.cnblogs.com/IMRIVER/p/9727102.html