Junit测试、反射、注解

Junit测试、反射、注解,第1张

一、测试分类:

1.黑盒测试:不需要写代码,给输入值,看程序是否能够输出期望的值。

2.白盒测试:需要写代码的。关注程序具体的执行流程

3.Junit使用:白盒测试 * 步骤:()

        1、定义一个测试类(测试用例)

        * 建议:

                  测试类名:被测试的类名Test  eg.  CalculatorTest

                  包名:xxx.xxx.xx.test    eg.  cn.itcast.test(包内放测试类,该包与被测试类的包平级)

        2、定义测试方法:可以独立运行

        * 建议:

                方法名:test测试的方法名       eg.testAdd()

                返回值:void

                参数列表:空参

        3、给方法加注解 @test

        4、导入Junit依赖环境

* 判定结果:

        红色:失败

        绿色:成功

        * 一般会使用断言 *** 作来处理结果:

                Assert.assertEquals(期望值,运算值);

* 注解:

        1、@Before:  初始化

                修饰的方法会在测试方法之前被自动执行

        2、@After:  释放资源

                修饰的方法会在测试方法执行之后被自动执行

二、反射:框架设计的灵魂

可以只修改配置文件,而不改变代码

 获取Class对象的三种方式以及用途

 

 Class的功能(使用Class对象)

 

 案例:设计一个“框架”,可以创建任意类的对象,并且执行其中的任意方法

import java.io.FileReader;
import java.io.InputStream;
import java.lang.reflect.Method;
import java.util.Properties;

/*
    框架类:不可以改变该类的任意代码
            创建任意类的对象,并且执行任意方法
* */
public class ReflectTest {
    public static void main(String[] args) throws Exception {
        //1.加载配置文件
        //1.1创建Properties 对象
        Properties pro=new Properties();
        //1.2加载配置文件,转换为一个Map集合

        /* 第一种方法:filereader 读取配置文件*/
        /*FileReader fr=new FileReader("E:\Java项目\Test\JavaWeb\src\reflect.properties");
        pro.load(fr);
        fr.close();*/

        /* 第二种方法:获取class目录下的配置文件*/
        ClassLoader cl=ReflectTest.class.getClassLoader();
        InputStream is=cl.getResourceAsStream("reflect.properties");
        pro.load(is);

        //2.获取配置文件中的数据
        String cn=pro.getProperty("className");
        String mn=pro.getProperty("methodName");

        //3.加载该类进内存
        Class c= Class.forName(cn);
        //4.创建对象
        Object obj = c.newInstance();
        //5.获取方法对象
        Method m = c.getMethod(mn);
        //6.执行方法
        m.invoke(obj);
    }
}
三、注解 

JDK中预定义的注解

 自定义注解

 元注解(用于描述注解的注解)

 使用注解

小结

 案例:(简单测试框架,使用注解)

测试框架

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.lang.reflect.Method;

/*
    简单的测试框架:
    当主方法被执行,会自动检测所有被检测(加了Check注解的)方法,判断是否有异常,并且记录到文件中
*/
public class TestCheck {
    public static void main(String[] args) throws IOException {
        //1.创建计算器(被检测的)对象
        Calculator c=new Calculator();
        //2.获取字节码文件对象(得到所有的方法,执行所有的方法)
        Class cls= c.getClass();
        //3.得到所有的方法
        Method[] methods = cls.getMethods();

        int num=0;//出现异常的次数
        BufferedWriter bw=new BufferedWriter(new FileWriter("bug.txt"));

        //4.执行所有的方法
        for(Method m:methods){
            //判断方法上是否有Check注解
            if(m.isAnnotationPresent(Check.class)){
                try {
                    //5.如果有,就执行该方法
                    m.invoke(c);
                } catch (Exception e) {
                    //6.捕获异常
                    //记录到文件中
                    num++;
                    bw.write(m.getName()+"方法出异常了");
                    bw.newLine();
                    bw.write("异常的名称:"+e.getCause().getClass().getSimpleName());
                    bw.newLine();
                    bw.write("异常的原因"+e.getCause().getMessage());
                    bw.newLine();
                    bw.write("---------------------");
                    bw.newLine();
                }
            }
        }
        bw.write("本次总共出现了"+num+"次异常");
        bw.flush();
        bw.close();
    }
}

注解 

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

/*
    注解类
*/
@Retention(value= RetentionPolicy.RUNTIME)
public @interface Check {
}

 被测试的代码

/*
    计算器
*/
public class Calculator {
    @Check
    public void add(){
        System.out.println("1+0="+(1+0));
    }
    @Check
    public void sub(){
        System.out.println("1-0="+(1-0));
    }
    @Check
    public void mul(){
        System.out.println("1*0="+(1*0));
    }
    @Check
    public void div(){
        System.out.println("1/0="+(1/0));
    }
    public void show(){
        System.out.println("Calculator show()...");
    }
}

(1条消息) java注解-最通俗易懂的讲解_Tanyboye的博客-CSDN博客_java 注解https://blog.csdn.net/qq1404510094/article/details/80577555

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/872230.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-13
下一篇 2022-05-13

发表评论

登录后才能评论

评论列表(0条)

保存