需求
需求如这里所描述的:https://www.yuque.com/liueleven/oddxi4/iyp3d0
代码仓库:https://github.com/liueleven/lite-junit
功能细分
通过继承指定的类来检测哪些类是可能需要执行单元测试的,通过指定的方法命名规则(test*)来判断该方法是需要执行单元测试的。
和 JUnit 一样,需要支持 setUp 和 tearDown 功能。
还需要提供 JUnit 一样的断言工具类。
设计细分
执行入口
在 TestCaseStater 中,声明一个 start 方法,需要传入测试类的路径,来扫描包下的类,它是单元测试启动的入口:
public void run(Class cls) {
// todo
}
扫描规则
需要定义一套规则,来判断哪些类方法是需要测试的,在 cn.liueleven.junit.core.rule 路径下,作为一个工具类框架,并且考虑到后面的扩展,这个规则需要可扩展,对于日后新增规则的感知很弱,不会引起代码太大的改动。
定义一个规则接口,里面有一个规则执行方法,一个规则名称key,用来标识规则:
public interface Rule {
String getRuleName();
void execute(Object info);
}
public class RulePipeline {
private Map<String,Rule> ruleMap;
// todo 执行
}
测试类信息收集
通过这个方法,我们去扫描 TestCase 的所有子类,每扫描到一个子类,需要将它的类元数据保存起来,所以要定一个模型 ClassMetaData 来存储类元数据信息,同理也要建一个 MethodMetaData 存储方法元数据信息。这个类类似 BeanDefintion。
public class ClassMetaData {
private String className;
private Map<String,MethodMetaData> methodMap;
// json 格式,用于扩展预留
private String extInfo;
// ignore getter setter
}
public class MethodMetaData {
private String methodName;
private Object outputParam;
private List<Object> inputParam;
// json 格式,用于扩展预留
private String extInfo;
// ignore getter setter
}
hook 处理
用来处理当前类上下文信息,直接用模板方法模式,就可以了。
断言工具
cn.liueleven.junit.unit 路径下添加断言工具。
测试数据
idea 集成了 Junit 框架,一般都可以生成测试报告,例如多少失败,多少成功,行覆盖率等等,我们也需要设计一下,统计执行多少个类,多少个方法,成功失败等数据信息