Rumah >Java >javaTutorial >Cara menggunakan anotasi dan refleksi Java untuk melaksanakan panggilan Junit4
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
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(); }
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"); } }
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)
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!