Ich möchte eine Klasse mit unternehmensübergreifender Verarbeitung testen, die von Spring AOP als einzelne Einheit erstellt wurde.
Spring AOP wird basierend auf DI eingerichtet, und die Seite, die die Komponente verwendet, injiziert eine Proxy-Instanz (nicht die im Container selbst registrierte Bean, sondern die Bean, die die in AOP definierte Funktion erweitert). AOP wird realisiert von.
Da ich diesmal jedoch einen Komponententest durchführen möchte, möchte ich eine Testmethode bereitstellen, ohne den DI-Container zu starten und abhängig vom Kontext.
Wenn das Argument "null" enthält, implementieren Sie den Prozess des Auslösens von "NullPointerException" in AOP und wenden Sie ihn auf die Methode der Klasse "TestService" (Testklasse) an. (Die NullCheck-Annotation ist nur eine Markierung, daher werde ich sie hier weglassen.)
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);//Holen Sie sich alle Argumente und Objekte::Fragen Sie bei requireNonNull nach
return proceedingJoinPoint.proceed();
}
}
TestService.java
public class TestService {
@NullCheck
public void doSomething(Object arg) {
}
}
Lassen Sie uns den Teil implementieren, in dem Spring DI den Proxy von der Bean selbst erhält. Instanz von AspectJProxyFactory
Fügen Sie die diesmal erstellte Aspektklasse hinzu.
Wenn Sie die Testbeispielmethode mit dem werkseitig erhaltenen Proxy ausführen, können Sie anscheinend bestätigen, dass der in AOP definierte Prozess aufgerufen und "NullPointerException" ausgelöst wird.
TestAspectLogic.java
public class TestAspectLogic {
@Test
public void testAspect() {
AspectJProxyFactory factory = new AspectJProxyFactory(new TestService());
factory.addAspect(new AspectLogic()); //Wenden Sie hier die AspectLogic-Klasse an
TestService proxy = factory.getProxy();
try {
proxy.doSomething(null);
failBecauseExceptionWasNotThrown(NullPointerException.class);
} catch(NullPointerException npe) {
}
}
}
Ausgabe
NullCheck!!
Schreiben wir einen Test für AOP.
Recommended Posts