Junit單元測試 反射 註解

2021-08-28 07:01:16 字數 4387 閱讀 2495

一、junit單元測試

1、單元測試:可以代替掉程式中的main方法。程式可以從單元測試方法開始執行。

使用:1. 要在單元測試方法上面加上註解 @test

2. 以單元測試的方式去執行即可。

要求:1. 單元測試方法的方法名一般以test開頭 (軟性規定)

2. 單元測試方法要以public 修飾,沒有返回值,沒有引數 (硬性規定)

單元測試方法的執行:

1. 如果選中某個單元測試方法,然後右鍵執行,那麼執行的就是這個方法。

2. 如果選中的是某個人,然後右鍵執行,那麼執行的就是這個類中所有的單元測試方法。

public class demo01test )

@student(name = "大冪冪", age = 20, hobbies = "抽菸")

public void method()

4. 如果給陣列型別的屬性賦值的時候,該陣列中只有乙個值,那麼可以省略大括號。

如果要使用註解,直接在類或者方法或者變數上面加上@註解,如果這個註解有需要被賦值的屬性,後面

跟上小括號,在小括號中給屬性賦值即可。

public @inte***ce student )

public @inte***ce myanno {

4、 @retention 是乙個元註解,可以限制註解的宣告 週期, 如果不使用這個元註解,那麼註解預設在

源**階段和編譯後的.class階段有效,一旦程式執行,那麼註解就會消失。

retention這個元註解中有乙個屬性叫做value, 所以我們給這個屬性賦值的時候可以省略屬性名。

並且這個value表示的含義為被修飾註解的宣告週期。 這個value屬性是 retentionpolicy型別

我們可以給value屬性傳遞三個東西:

retentionpolicy.source: 表示被修飾的註解只在源**階段有效。

retentionpolicy.class:  表示被修飾的註解在源**階段和編譯後的.class檔案中有效,一旦執行之後就會消失

retentionpolicy.runtime:表示被修飾的註解在源**階段,編譯後的.class並且執行時有效。

//這個註解只在源**中有效。編譯後就會消失

@retention(retentionpolicy.source)

public @inte***ce myanno1 {

//在源**階段和編譯後的class中有效,執行時期記憶體中是沒有的

@retention(retentionpolicy.class)

public @inte***ce myanno2 {

//執行時期也有效

@retention(retentionpolicy.runtime)

public @inte***ce myanno3 {

5、註解的解析,獲取註解中的內容並使用,比如獲取註解中的屬性。

相關api

annotation介面: 是所有註解的根介面。 所有的註解都預設實現了這個介面。

annotatedelement介面: 裡面的方法可以對註解進行操作。

boolean isannotationpresent(class annotationclass):判斷是否有指定的註解。 引數class物件為註解的class

t getannotation(class annotationclass): 獲取指定的註解。 引數是註解的.class物件。 要獲取哪個註解,就傳遞哪個註解的.class

annotation getannotations():獲取所有的註解

解析註解,必須要結合反射技術。

annotatedelement這個介面下面有一些實現類,分別是 class, method, filed。 所以我們可以通過這些實現類物件化

去呼叫上面操作註解的方法。

如果通過class物件呼叫上面的方法,比如getannotations,那麼就是獲取類上面的註解。

如果通過method物件呼叫上面的方法,獲取的就是方法上面的註解

如果通過field物件呼叫上面的註解,獲取的就是成員變數上的註解....

想要獲取什麼上的註解,那麼就通過什麼物件去呼叫操作註解的方法就可以了。

public class demo01annoparse {

//獲取到bookstore這個類上面的註解屬性並且列印

//解析註解要通過反射技術,如果要獲取類上面的註解通過class物件呼叫getannotation獲取註解即可

public static void main(string args) throws classnotfoundexception {

//獲取bookstore這個類的class物件

class clazz = class.forname("cn.itcast.demo05.bookstore");

//判斷這個類上面有沒有book註解。

boolean flag = clazz.isannotationpresent(book.class);

//如果這個類上面有book註解,那麼就獲取

if (flag) {

//呼叫getnnotation獲取指定的註解

annotation annotation = clazz.getannotation(book.class);

//獲取到的註解真正是book,可以向下轉型成book,然後獲取裡面的屬性

book book = (book)annotation;

//列印註解的屬性

system.out.println(book.value());

system.out.println(book.price());

system.out.println(book.author());

6、模擬單元測試。

自定義乙個註解@mytest。

然後再乙個類中定義一些方法,在其中的方法上加上@mytest註解,然後獲取這個類中的所有方法,並且執行

帶有@mytest的方法

public class demo02mytest {

public static void main(string args) throws classnotfoundexception, illegalacces***ception, instantiationexception, invocationtargetexception {

//獲取mytestclass的class物件

class clazz = class.forname("cn.itcast.demo05.mytestclass");

//建立物件,留作呼叫方法使用

object obj = clazz.newinstance();

//獲取這個類中所有的成員方法

method methods = clazz.getmethods();

//遍歷這個陣列,獲取到每乙個方法

for (method method : methods) {

//拿到這個方法,判斷這個方法上有沒有@mytest註解,如果有,就執行這個方法

if(method.isannotationpresent(mytest.class)) {

method.invoke(obj); //通過obj物件呼叫了這個方法

@book(value = "西遊記", price = 100, author = "吳承恩")

public class bookstore {

public void method() {

//使用元註解,讓book在執行時期也有效

@retention(retentionpolicy.runtime)

public @inte***ce book {

//書名

string value();

//**

int price();

//作者

string author();

public class mytestclass {

@mytest

public void method1() {

system.out.println("method1");

public void method2() {

system.out.println("method2");

public void method13() {

system.out.println("method3");

@mytest

public void method4() {

system.out.println("method4");

@retention(retentionpolicy.runtime) //註解在執行時期有效

@target(elementtype.method) //只能加在方法上

public @inte***ce mytest {

Junit 單元測試

測試類package com.lin.music item import android.content.contentresolver import android.content.context import android.database.cursor import android.net....

Junit單元測試

最近在寫一模組的 不能再像原來一樣不認真考慮測試了,因為看看junit如何寫單元測試,這裡作一些筆記。2.關於使用junit的目的。主要有四種 摘自某參考資料。對此,我覺得我是想測試某個類中的某幾個方法,因為覺得這幾個方法比較容易出問題,不過這樣是顯得有些不嚴謹了。其實往往測關鍵方法的時候,其中也都...

Junit單元測試

書寫規範 包 寫在.test包下或者.junit包下 類命名規範 xxtest 測試方法規範 命名規範 test xx 其他規範 返回值為void 空參如何使用junit單元測試?在需要測試的方法上加上 test註解,ctrl 1導包 test public void testgetclient j...