Maison  >  Article  >  Java  >  Comment utiliser les annotations et la réflexion Java pour implémenter les appels Junit4

Comment utiliser les annotations et la réflexion Java pour implémenter les appels Junit4

WBOY
WBOYavant
2023-05-04 13:37:06931parcourir

Exigence d'instance

Exigence : Simulez la structure du cas d'utilisation dans Junit4 et personnalisez une étiquette comme identification du cas de test.

L'annotation @Test représente un cas de test dans Junit4 L'essence de chaque cas de test est une méthode dans la classe de test, c'est-à-dire :

@Test public void test() { fail("Not yet implemented"); }

Exigences spécifiques : #🎜. 🎜#

La classe de test est la méthode de construction par défaut

Utilisez le label MyTag comme identifiant pour savoir si la méthode est un cas d'utilisation

La méthode comme utilisation case doit être sans paramètre

# 🎜🎜#Écrire une méthode runCase(String pkgName) afin qu'elle puisse terminer l'appel des cas de test dans la classe spécifiée

Annotation design

#🎜 🎜#Vous devez d'abord définir une annotation MyTag. Le code est le suivant :

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

Conception du cas de test

Simulez le framework junit4 et écrivez une classe de test, où vous connecter, info et logout sont des méthodes sans paramètre, et test est une méthode paramétrée# 🎜🎜#
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");  } }

L'idée de conception de la classe en cours d'exécution

Parce que la classe de test est la méthode de construction par défaut, la L'API suivante est utilisée pour terminer l'instanciation de classe

Class<?> clazz = Class.forName(pkgName) Object obj = clazz.newInstance();

Parce que la classe de test contient de nombreuses méthodes, nous devons obtenir toutes les méthodes et les filtrer selon les règles. Le code est le suivant :

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

Déterminez si la balise de la méthode est MyTag Le code est le suivant :

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

Judge Si la méthode n'a pas de paramètres, le code est le suivant : #🎜 🎜#

If(method.getParameterCount()==0)
Exécutez la méthode, le code est le suivant :

method.invoke(obj)
Full code

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()); } } }
Exécutez le code, le résultat est le suivant : # 🎜🎜 #
logout

Le nom du cas de test est : logout

login

Le nom du cas de test est : login

info

Le nom du cas de test est : info

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer