国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

單元測試&反射&注解

這篇具有很好參考價(jià)值的文章主要介紹了單元測試&反射&注解。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

單元測試

? ? ? ? ?就是針對最小的功能單元(方法),編寫測試代碼對其進(jìn)行正確性測試。

咱們之前是如何進(jìn)行單元測試的?有啥問題 ??

單元測試&反射&注解,單元測試,java,開發(fā)語言?

Junit單元測試框架?

? ? ? ? ? 可以用來對方法進(jìn)行測試,它是由Junit公司開源出來的?

具體步驟?

?Junit框架的常見注解

單元測試&反射&注解,單元測試,java,開發(fā)語言

public class StringUtilTest {

    @Test
    @Before
    public void testPrintNumber(){

        StringUtil.printNumber("哈哈");
        StringUtil.printNumber(null);
    }

    @Test
    public void testGetMaxIndex(){

        int sum = new StringUtil().getMaxIndex("蝙蝠俠不打你了");
        System.out.println(sum);

        Assert.assertEquals("警告,警告",6,sum);
    }

    @Test
    @After
    public void testPrint(){

        System.err.println("結(jié)束");
    }
}

?反射(Reflection)

? ? ? ? ? 反射就是:加載類,并允許以編程的方式解剖類中的各種成分(成員變量、方法、構(gòu)造器等)。?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??單元測試&反射&注解,單元測試,java,開發(fā)語言

反射學(xué)什么??

單元測試&反射&注解,單元測試,java,開發(fā)語言?

獲取Class對象的三種方式?

1.直接使用類名.class獲取:Class c1 = 類名.class

2.調(diào)用Class提供的方法:Class c2 = Class.forName("全類名")

3.調(diào)用Object提供的方法:Class c3 = 對象.getClass()?

public class Demo1 {

    @Test
   public void testDemo01() throws ClassNotFoundException {
       Class catClass = Cat.class;
       System.out.println(catClass.getName());

       Class aClass = Class.forName("com.itheima.b_反射.Cat");
       System.out.println(aClass);

       Class aClass1 = new Cat().getClass();
       System.out.println(aClass1);
   }
}

?獲取類的構(gòu)造器

單元測試&反射&注解,單元測試,java,開發(fā)語言?單元測試&反射&注解,單元測試,java,開發(fā)語言

/*
獲取構(gòu)造器[下面是Class的方法]
    Constructor<?>[] getConstructors()	獲取所有的公共構(gòu)造器(只能獲取public修飾的)
    Constructor<?>[] getDeclaredConstructors()	獲取全部構(gòu)造器(只要存在就能拿到)
    Constructor<T> getConstructor(Class<?>... parameterTypes)	獲取某個公共構(gòu)造器(只能獲取public修飾的)
    Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes)	獲取某個構(gòu)造器(只要存在就能拿到)

使用構(gòu)造器(創(chuàng)建對象)[下面是Constructor的方法]
    T newInstance(Object... initArgs)	調(diào)用此構(gòu)造器對象表示的構(gòu)造器,并傳入?yún)?shù),完成對象的初始化并返回
    public void  setAccessible(boolean flag)	設(shè)置為true,表示禁止檢查訪問控制(暴力反射)

注意
    使如果想使用private修飾構(gòu)造器反射創(chuàng)建對象,需要暴力反射(禁止JVM檢查構(gòu)造方法的訪問權(quán)限)
*/
public class Demo2 {

    @Test
    public void testConstructor() throws NoSuchMethodException {

        Class<Cat> clazz = Cat.class;

        //獲取全部構(gòu)造器(public)
        Constructor[] constructors = clazz.getConstructors();

        for (Constructor constructor : constructors) {
            System.out.println(constructor);
        }

        Constructor<?>[] declaredConstructors = clazz.getDeclaredConstructors();
        for (Constructor<?> declaredConstructor : declaredConstructors) {
            System.out.println(declaredConstructor);
        }

        System.out.println("====================================");

        Constructor<Cat> constructor = clazz.getConstructor();
        System.out.println(constructor);
        System.out.println("===============================");
        Constructor<Cat> declaredConstructor = clazz.getDeclaredConstructor(String.class, int.class);
        System.out.println("方法名:" + declaredConstructor.getName() + "參數(shù)個數(shù):"+ declaredConstructor.getParameterCount());
    }

    @Test
    public void testNew() throws NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {

        Class calazz = Cat.class;

        Constructor declaredConstructor = calazz.getDeclaredConstructor(String.class, int.class);

        declaredConstructor.setAccessible(true);

        Cat 加菲貓 = (Cat)declaredConstructor.newInstance("加菲貓", 3);

        System.out.println(加菲貓);
    }
}

?獲取類的成員變量

單元測試&反射&注解,單元測試,java,開發(fā)語言?單元測試&反射&注解,單元測試,java,開發(fā)語言

public class Demo3 {

   @Test
    public void testField() throws NoSuchFieldException {

       Class<Cat> catClass = Cat.class;

       //獲取類的所有公共成員變量(只能獲取public修飾的)
       Field[] fields = catClass.getFields();
       for (Field field : fields) {
           System.out.println(field);
       }

       System.out.println("===============");
       //獲取類的全部成員變量
       Field[] declaredFields = catClass.getDeclaredFields();
       for (Field declaredField : declaredFields) {
           System.out.println(declaredField.getName() + declaredField.getType());
       }
       System.out.println("====================");
       Field a = catClass.getField("a");//獲取某個類的成員變量,只要存在就能拿到
       System.out.println(a);

       Field age = catClass.getDeclaredField("age");
       System.out.println(age);
   }

   @Test
   public void test2() throws NoSuchFieldException, IllegalAccessException {

       Class clazz = Cat.class;

       Cat cat = new Cat();
      // System.out.println(cat);

       Field age = clazz.getDeclaredField("age");

       Field name = clazz.getDeclaredField("name");
       //暴力反射
       age.setAccessible(true);
       name.setAccessible(true);

       age.set(cat,5);
       name.set(cat,"哈哈");
       System.out.println(cat);

       //取值
       Object o = age.get(cat);
       System.out.println(o);
   }
}

?獲取類的成員方法

?單元測試&反射&注解,單元測試,java,開發(fā)語言

單元測試&反射&注解,單元測試,java,開發(fā)語言?

/*
獲取成員方法[Class提供]
    Method[] getMethods()	獲取類的全部公共成員方法(只能獲取public修飾的)
    Method[] getDeclaredMethods()	獲取類的全部成員方法(只要存在就能拿到)
    Method getMethod(String name, Class<?>... parameterTypes) 	獲取類的某個公共成員方法(只能獲取public修飾的)
    Method getDeclaredMethod(String name, Class<?>... parameterTypes)	獲取類的某個成員方法(只要存在就能拿到)

使用成員方法(執(zhí)行方法)[Method提供]
    public Object invoke(Object obj, Object... args)	觸發(fā)某個對象的該方法執(zhí)行。
    public void  setAccessible(boolean flag)	設(shè)置為true,表示禁止檢查訪問控制(暴力反射)

注意
    使如果想使用private修飾的成員方法,需要暴力反射
*/
public class Demo4 {

    @Test
    public void testMethods() throws NoSuchMethodException {
        Class<Cat> catClass = Cat.class;

        Method[] methods = catClass.getMethods();
        for (Method method : methods) {
            System.out.println("方法名:"+ method.getName() + "返回值類型:" + method.getReturnType());
        }

        System.out.println("===========================");

        Method[] declaredMethods = catClass.getDeclaredMethods();

        for (Method declaredMethod : declaredMethods) {
            System.out.println("方法名:"+ declaredMethod.getName() + "返回值類型" + declaredMethod.getReturnType());
        }

        System.out.println("===========================");
        Method eat = catClass.getDeclaredMethod("eat");
        System.out.println("方法名:"+ eat.getName() + "返回值類型" + eat.getReturnType());

        System.out.println("===========================");
        Method eat1 = catClass.getDeclaredMethod("eat", String.class);
        System.out.println("方法名:"+ eat1.getName() + "返回值類型" + eat1.getReturnType());
    }

    @Test
    public void tese2() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {

        Class<Cat> clazz = Cat.class;

        Method eat = clazz.getDeclaredMethod("eat", String.class);

        eat.setAccessible(true);

        Cat cat = new Cat();
        Object invoke = eat.invoke(cat, "??");
        System.out.println(invoke);
    }
}

案例:?

/*
反射案例
    對于任意一個對象,該框架都可以把對象的字段名和對應(yīng)的值,然后打印在控制臺

*/
public class Demo5 {
    public static void main(String[] args) {
        //1. 準(zhǔn)備兩個對象
        Student student = new Student("柳巖", 40, '女', 167.5, "女星");
        Teacher teacher = new Teacher("播妞", 6000);

        //2.調(diào)用方法

        print(student);
    }

    public static void print(Object o)  {

        try {
            Class clazz = o.getClass();

            Field[] declaredFields = clazz.getDeclaredFields();
            for (Field declaredField : declaredFields) {

                declaredField.setAccessible(true);

                String name = declaredField.getName();
                Object o1 = declaredField.get(o);
                System.out.println(name+o1);
            }
        }catch (Exception e){
        }

    }
}



class Student{
    public Student(String name, int age, char sex, double height, String hobby) {
        this.name = name;
        this.age = age;
        this.sex = sex;
        this.height = height;
        this.hobby = hobby;
    }

    private String name;
    private int age;
    private char sex;
    private double height;
    private String hobby;
}

class Teacher {
    public Teacher(String name, double salary) {
        this.name = name;
        this.salary = salary;
    }

    private String name;
    private double salary;
}

反射的作用?

單元測試&反射&注解,單元測試,java,開發(fā)語言?

注解

元注解

? ? ? ? ? ? 指的是:修飾注解的注解。?

?注解解析器

? ? ?就是判斷類上、方法上、成員變量上是否存在注解,并把注解里的內(nèi)容給解析出來。?

如何解析注解?

單元測試&反射&注解,單元測試,java,開發(fā)語言?

單元測試&反射&注解,單元測試,java,開發(fā)語言?文章來源地址http://www.zghlxwxcb.cn/news/detail-723118.html

public class ClassNameCheckParser {

    public static void checkClassName(){
        //1.存放不符合規(guī)范的類
        ArrayList<String> list = new ArrayList<>();

        //2.獲取指定包下的所有類
        Set<Class> clazzSet = ClassUtil.getClasses("com.itheima.c_annotation.example");
        //3.遍歷set集合找到標(biāo)注@ClassNameCheck注解的類'

        for (Class clazz : clazzSet) {

            //判斷某個類上是否有某個注解
            if(clazz.isAnnotationPresent(ClassNameCheck.class)){

                //獲得類名
                String simpleName = clazz.getSimpleName();
                //檢查類名是否以Heima開頭
                if(!simpleName.startsWith("Hei")){

                    list.add(simpleName);
                }
            }
        }

        //判斷集合中是否有不符合規(guī)范的,如果有直接保存
        if(list.size() > 0) {

            System.out.println("下面類名不符合規(guī)范");
            for (String name : list) {
                System.out.println(name);
            }
            throw new RuntimeException("程序終止");
        }

    }

}

到了這里,關(guān)于單元測試&反射&注解的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Day14:單元測試、Junit單元測試框架、反射、注解

    Day14:單元測試、Junit單元測試框架、反射、注解

    針對最小的功能單元(方法)進(jìn)行正確性測試 編寫正規(guī)的單元測試框架 傳統(tǒng)的無法執(zhí)行自動化測試,且無法得到測試報(bào)告 Junit的作用: 測試類取名:原類名+Test(大駝峰) 測試方法取名:test+原函數(shù)名稱(小駝峰) 測試方法:必須public,無參,無返回值 測試方法上面必須加

    2024年04月14日
    瀏覽(23)
  • Java_單元測試、反射

    Java_單元測試、反射

    1.1 單元測試快速入門 所謂單元測試,就是針對最小的功能單元,編寫測試代碼對其進(jìn)行正確性測試。 我們想想,咱們之前是怎么進(jìn)行測試的呢? 比如說我們寫了一個學(xué)生管理系統(tǒng),有添加學(xué)生、修改學(xué)生、刪除學(xué)生、查詢學(xué)生等這些功能。要對這些功能這幾個功能進(jìn)行測試

    2024年01月18日
    瀏覽(23)
  • java的單元測試和反射

    java的單元測試和反射

    就是針對最小的功能單元,編寫測試代碼對其進(jìn)行正確性測試 Junit單元測試框架: 可以用來對方法進(jìn)行測試 有點(diǎn): 可以靈活的編寫測試代碼,可以針對某個方法進(jìn)行測試,也支持一鍵完成對全部方法的自動發(fā)測試,且各自獨(dú)立 測試的方法必須是 公共,無參,無返回值 測試

    2024年04月28日
    瀏覽(14)
  • Java SE 學(xué)習(xí)筆記(十七)—— 單元測試、反射

    Java SE 學(xué)習(xí)筆記(十七)—— 單元測試、反射

    開發(fā)好的系統(tǒng)中存在很多方法,如何對這些方法進(jìn)行測試? 以前我們都是將代碼全部寫完再進(jìn)行測試。其實(shí)這樣并不是很好。在以后工作的時(shí)候,都是寫完一部分代碼,就測試一部分。這樣,代碼中的問題可以得到及時(shí)修復(fù)。也避免了由于代碼過多,從而無法準(zhǔn)確定位到錯誤

    2024年02月06日
    瀏覽(24)
  • JAVA學(xué)習(xí)-注解.基于注解的單元測試

    ? ? ? ? 基于注解的單元測試是一種使用注解來簡化和增強(qiáng)測試代碼編寫和執(zhí)行的方法。在Java中,有多個基于注解的單元測試框架可供選擇,包括JUnit、TestNG等。下面將對幾個常見的基于注解的單元測試框架進(jìn)行概述,并介紹它們的特點(diǎn)、使用方法以及與其他框架的比較。

    2024年04月28日
    瀏覽(20)
  • 【Java實(shí)用干貨】使用@SpringBootTest注解進(jìn)行單元測試

    【Java實(shí)用干貨】使用@SpringBootTest注解進(jìn)行單元測試

    【【Java實(shí)用干貨】使用@SpringBootTest注解進(jìn)行單元測試 大家好,我是洲洲,歡迎關(guān)注,一個愛聽周杰倫的程序員。關(guān)注公眾號【程序員洲洲】即可獲得海量學(xué)習(xí)資料、面試筆記、大廠獨(dú)家學(xué)習(xí)體系路線等…還可以加入技術(shù)交流群~ @SpringBootTest注解是SpringBoot自1.4.0版本開始引入的

    2024年02月05日
    瀏覽(23)
  • [Java學(xué)習(xí)日記]日志、類加載器、XML、DTD與schema、XML解析、XPath、單元測試、Assert、BeforeAfter、注解、自定義注解、注解案例

    [Java學(xué)習(xí)日記]日志、類加載器、XML、DTD與schema、XML解析、XPath、單元測試、Assert、BeforeAfter、注解、自定義注解、注解案例

    下面的案例中只是做一個簡單的了解,不做深入理解啦 目錄 一.使用Logback寫日志 二.類加載器 三.XML 四.XML編寫規(guī)定:DTD與schema 五.XML解析 六.XPath 七.單元測試 七.Assert(斷言):檢驗(yàn)方法結(jié)果 八.使用before與after注解備份與還原數(shù)據(jù) 九.注解 十.自定義注解 十一.注解案例:用注

    2024年02月04日
    瀏覽(29)
  • 25.單元測試、反射

    25.單元測試、反射

    單元測試就是針對最小的功能單元編寫測試代碼,Java程序最小的功能單元是方法。因此,單元測試就是針對Java方法進(jìn)行的測試,進(jìn)而檢查方法的正確性。 只有一個main方法,如果一個方法的測試失敗了,其他測試方法會受到影響。 無法得到測試的結(jié)果報(bào)告,需要程序員自己

    2024年02月10日
    瀏覽(17)
  • 【go語言開發(fā)】編寫單元測試

    【go語言開發(fā)】編寫單元測試

    本文主要介紹使用go語言編寫單元測試用例,首先介紹如何編寫單元測試,然后介紹基本命令的使用,最后給出demo示例 在go語言中編寫單元測試時(shí),使用說明 測試文件命名 :在 Go 語言中,測試文件的命名應(yīng)與被測試的源代碼文件相同,但以 “_test” 結(jié)尾。例如,如果你的源

    2024年02月04日
    瀏覽(35)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包