一、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...