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

Cara menggunakan anotasi dan refleksi Java untuk melaksanakan panggilan Junit4

WBOY
WBOYke hadapan
2023-05-04 13:37:06877semak imbas

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"); }

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(); }

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");  } }

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();

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) { //过滤规则  }

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

If(method.getAnnotation(MyTag.class) != null)
.

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

If(method.getParameterCount()==0)

Untuk menjalankan kaedah, kod adalah seperti berikut:

method.invoke(obj)

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()); } } }

Jalankan kod dan output adalah seperti berikut:

logout

Nama kes ujian ialah: logout

login

Nama kes ujian ialah: log masuk

info

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!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam