Rumah > Java > javaTutorial > Cara menggunakan anotasi dan refleksi Java untuk melaksanakan panggilan Junit4

Cara menggunakan anotasi dan refleksi Java untuk melaksanakan panggilan Junit4

WBOY
Lepaskan: 2023-05-04 13:37:06
ke hadapan
968 orang telah melayarinya

Keperluan contoh

Keperluan: Simulasi struktur kes penggunaan dalam Junit4 dan sesuaikan label sebagai pengenalan kes ujian.

Anotasi @Test dalam Junit4 mewakili kes ujian Intipati setiap kes ujian ialah kaedah dalam kelas ujian, iaitu:

@Test public void test() { fail("Not yet implemented"); }
Salin selepas log masuk

Keperluan khusus:

Ujian. kelas Ia adalah kaedah pembinaan lalai

Gunakan label MyTag sebagai pengecam sama ada kaedah itu adalah kes guna

Kaedah sebagai kes guna mestilah tanpa parameter

Tulis kaedah runCase(String pkgName), Untuk membolehkannya melengkapkan panggilan kes ujian dalam kelas yang ditentukan

Reka bentuk anotasi

Mula-mula anda perlu mentakrifkan MyTag anotasi, kodnya adalah seperti berikut :

import java.lang.annotation.Retention; import java.lang.annotation.Target; import java.lang.annotation.ElementType; import java.lang.annotation.RetentionPolicy; @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface MyTag{ String name(); }
Salin selepas log masuk

Reka bentuk kes ujian

Simulasikan rangka kerja junit4 dan tulis kelas ujian, di mana log masuk, maklumat dan log keluar ialah kaedah tanpa parameter dan ujian ialah kaedah berparameter

public class TestTag{ @MyTag(name="case1") public void login(){ System.out.println("login"); } @MyTag(name="case2") public void info(){ System.out.println("info");  } @MyTag(name="case3") public void logout(){ System.out.println("logout"); } @MyTag(name="case4") public void test(String p){ System.out.println("logout");  } }
Salin selepas log masuk

Idea reka bentuk kelas berjalan

Oleh kerana kelas ujian Ia adalah kaedah pembinaan lalai, jadi gunakan API berikut untuk melengkapkan instantiasi kelas

Class<?> clazz = Class.forName(pkgName) Object obj = clazz.newInstance();
Salin selepas log masuk

Kerana terdapat banyak kaedah dalam kelas ujian, kita perlu mendapatkan semua kaedah dan menapisnya mengikut peraturan Kodnya adalah seperti berikut:

Method[] methods = clazz.getMethods(); for (Method method : methods) { //过滤规则  }
Salin selepas log masuk

Untuk menentukan sama ada tag kaedah ialah MyTag, kodnya adalah seperti berikut:

If(method.getAnnotation(MyTag.class) != null)
Salin selepas log masuk
.

Untuk menentukan sama ada kaedah tidak mempunyai parameter, kod adalah seperti berikut:

If(method.getParameterCount()==0)
Salin selepas log masuk

Untuk menjalankan kaedah, kod adalah seperti berikut:

method.invoke(obj)
Salin selepas log masuk

Kod lengkap

public static void runCase(String pkgName) throws IllegalAccessException,IllegalArgumentException, InvocationTargetException, InstantiationException,ClassNotFoundException {  Class<?> clazz = Class.forName(pkgName);  Object obj = clazz.newInstance();  Method[] methods = clazz.getMethods(); for (Method method : methods) {        if(method.getAnnotation(MyTag.class) != null&& method.getParameterCount()==0) {                                 method.invoke(obj); //调用方法                System.out.println("测试用例名称是:"+method.getName()); } } }
Salin selepas log masuk

Jalankan kod dan output adalah seperti berikut:

logout
Salin selepas log masuk

Nama kes ujian ialah: logout

login
Salin selepas log masuk

Nama kes ujian ialah: log masuk

info
Salin selepas log masuk

Kes ujian nama ialah :info

Atas ialah kandungan terperinci Cara menggunakan anotasi dan refleksi Java untuk melaksanakan panggilan Junit4. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:yisu.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan