[JAVA] So führen Sie einen Komponententest für Spring AOP durch

Was du machen willst

Ich möchte eine Klasse mit unternehmensübergreifender Verarbeitung testen, die von Spring AOP als einzelne Einheit erstellt wurde.

Funktionsweise von Spring AOP (ungefähr) und Probleme beim Testen von Einheiten

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. aop.png

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.

Probe diesmal vorbereitet

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) {
	}
}

Holen Sie sich einen Proxy von AspectJProxyFactory.

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!!

Zusammenfassung

Schreiben wir einen Test für AOP.

Recommended Posts

So führen Sie einen Komponententest für Spring AOP durch
So schreiben Sie einen Komponententest für Spring Boot 2
So schreiben Sie den Spring AOP Point Cut Specifier
Einführung in Micronaut 2 ~ Unit Test ~
Einführung in Spring Boot ② ~ AOP ~
So führen Sie mit RxAndroid einen Komponententest mit JVM an einer Quelle durch
So testen Sie den Bildschirm zum Hochladen von Dateien mit Spring + Selenium
Dynamisches Schreiben iterativer Testfälle mit test / unit (Test :: Unit)
Wie man Lombok im Frühling benutzt
Hinweise zur Verwendung von Spring Data JDBC
[So installieren Sie Spring Data Jpa]
So stellen Sie Spring Boot + PostgreSQL ein
Verwendung von ModelMapper (Spring Boot)
ProxyFactory ist praktisch, wenn Sie AOP mit Spring testen möchten!
Beispielcode zum Testen eines Spring Boot-Controllers mit MockMvc
Ich habe getestet, wie man Rubys Test / Gerät und Janken's Code verwendet.
So filtern Sie den JUnit-Test in Gradle
Java Artery - Einfach zu verwendende Unit-Test-Bibliothek
Wichtige Änderungen im Zusammenhang mit Spring Framework 5.0 Test
Wie kann ich Spring Tool in Eclipse 4.6.3 einbinden?
Ich möchte einen Unit Test schreiben!
So testen Sie den privaten Bereich mit JUnit
[Spring MVC] Übergeben von Pfadvariablen
So teilen Sie eine Spring Boot-Nachrichtendatei
[SpringBoot] So schreiben Sie einen Controller-Test
Über Spring AOP
Über den Frühling AOP
[Java] So testen Sie, ob es in JUnit null ist
Informationen zum Entwerfen einer Spring Boot- und Unit-Test-Umgebung
Verwendung von MyBatis2 (iBatis) mit Spring Boot 1.4 (Spring 4)
So testen Sie Interrupts während Thread.sleep mit JUnit
Verstehen, wie Spring DB-Verbindungen (DB-Transaktionen) freigegeben werden
Verwendung des eingebauten h2db mit Federstiefel
So verkleinern Sie das Spring Boot Docker-Image
JUnit 5: Wie man Testfälle in enum schreibt
Verwendung von Spring Boot-Sitzungsattributen (@SessionAttributes)
[Rails] So implementieren Sie einen Unit-Test eines Modells
So fügen Sie in Spring Boot einen Klassenpfad hinzu
So schreiben Sie Testcode mit Basic-Zertifizierung
So binden Sie mit einer Eigenschaftendatei in Spring Boot
So definieren Sie mehrere orm.xml in Spring4, JPA2.1
[Spring Boot] So verweisen Sie auf die Eigenschaftendatei
Spring Boot - So stellen Sie das Sitzungszeitlimit ein
So führen Sie UT mit Excel als Testdaten mit Spring Boot + JUnit5 + DBUnit durch
[Schienen] Von der Testvorbereitung zum Modelleinheitentest [RSpec]
So entwickeln Sie OpenSPIFe
So stellen Sie Spring Boot Dependency Injection (DI) ein
So wenden Sie HandlerInterceptor auf das http-Inbound-Gateway von Spring Integration an
So rufen Sie AmazonSQSAsync auf
Verwendung von Map
Wie schreibe ich Rails
Wie benutzt man rbenv?
Verwendung von Struts2 * Spring Framework (Spring Plugin) Version Juni 2017
[Java] So lassen Sie die Federkonstruktorinjektion mit Lombok weg