Je souhaite tester une classe avec un traitement intersectoriel créé par Spring AOP en une seule unité.
Spring AOP est établi en fonction de DI, et le côté qui utilise le composant injecte une instance de proxy (pas le bean enregistré dans le conteneur lui-même, mais le bean qui étend la fonction définie dans AOP). AOP est réalisé par.
Cependant, puisque ce que je veux faire cette fois-ci est un test unitaire, je voudrais fournir une méthode de test sans démarrer le conteneur DI et en fonction du contexte.
S'il y a «null» dans l'argument, implémentez le processus de lancement de «NullPointerException» dans AOP et appliquez-le à la méthode de la classe «TestService» (classe de test). (L'annotation NullCheck n'est qu'un marqueur, je l'omettrai donc ici.)
AspectLogic.java
@Aspect
@Component
public class AspectLogic {
@Around("@annotation(NullCheck)")
public Object invoke(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
System.out.println("NullCheck!!");
Stream.of(proceedingJoinPoint.getArgs()).forEach(Objects::requireNonNull);//Obtenir tous les arguments et objets::Vérifier avec requireNonNull
return proceedingJoinPoint.proceed();
}
}
TestService.java
public class TestService {
@NullCheck
public void doSomething(Object arg) {
}
}
Implémentons la partie où Spring DI obtient le proxy du bean par nous-mêmes. Instance ʻAspectJProxyFactory Ajoutez la classe Aspect créée cette fois à. Si vous cliquez sur la méthode de l'échantillon de test en utilisant le proxy obtenu de l'usine, il semble que vous puissiez confirmer que le processus défini dans AOP est appelé et que
NullPointerException` est levé.
TestAspectLogic.java
public class TestAspectLogic {
@Test
public void testAspect() {
AspectJProxyFactory factory = new AspectJProxyFactory(new TestService());
factory.addAspect(new AspectLogic()); //Appliquez la classe AspectLogic ici
TestService proxy = factory.getProxy();
try {
proxy.doSomething(null);
failBecauseExceptionWasNotThrown(NullPointerException.class);
} catch(NullPointerException npe) {
}
}
}
production
NullCheck!!
Écrivons fermement un test pour AOP.
Recommended Posts