简单的测试"框架"
程序员文章站
2022-03-14 19:12:56
...
题目
讲一个计算器类进行测试,最后在文本文件中显示出出现的异常信息,和出现异常的次数
分析
使用注解来进行测试,更加方便,只需给计算器类需要测试的方法上加上注解即可;
当主方法执行后,会自动自行检测的所有方法(加上 Check 注解的方法),判断是否有异常,记录到文件中。
程序代码
注解类
package com.company.check;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Check {
}
测试类
package com.company.check;
import java.io.*;
import java.lang.reflect.Method;
public class TestCheck {
public static void main(String[] args) throws IOException {
//1、创建计算器对象
Calculator calc = new Calculator();
//2、获取字节码对象
Class cls = calc.getClass();
//3、获取所有的方法
Method[] methods = cls.getMethods();
int count = 0;//记录出现异常的次数
BufferedWriter bw = new BufferedWriter(new FileWriter("bug.txt"));
for (Method method : methods) {
//4、判断方法上是否有 Check 注解
if (method.isAnnotationPresent(Check.class)) {
try {
//5、有就执行方法
method.invoke(calc);
//6、捕获异常
} catch (Exception e) {
//记录到文件中
count++;
bw.write(method.getName()+"方法处异常了");
bw.newLine();
bw.write("异常的名称"+e.getCause().getClass().getSimpleName());
bw.newLine();
bw.write("异常的原因"+ e.getCause().getMessage());
bw.newLine();
bw.write("-----------------------------------------");
bw.newLine();
//e.printStackTrace();
}
}
}
bw.write("本次测试一共出现"+count+"次异常");
bw.flush();
bw.close();
}
}
计算器类
package com.company.check;
public class Calculator {
@Check
public void div() {
System.out.println("1/0=" + (1 / 0));
}
public void show(){
System.out.println("show方法执行了" );
}
}