Hallo,
Folgendes Problem:
Ich nutze das JMH Framework um Spring Boot Tests zu benchmarken.
Spring Boot Tests haben meistens @Autowired Felder, welche in JUnit Tests normalerweise automatisch injected werden.
Wenn ich allerdings JMH nutze um diese Tests zu benchmarken, dann läuft natürlich nicht mehr die JUnit Engine durch die Test-Methoden sondern der JMH-Runner. Und dieser ist absolut nicht dazu in der Lage die @Autowired-Felder zu injecten.
Das Problem und ein Workaround, welches ich in veränderter Form nutze wird hier erklärt:
https://gist.github.com/msievers/ce80d343fc15c44bea6cbb741dde7e45
Ich starte in einer Test-Methode den JMH-Runner, damit das Projekt Continuous Integration erfüllt, das heißt Jenkins oder diverse Tools damit funktionieren.
Bevor ich den JMH-Runner starte setze ich den SpringContext in eine statische Variable.
Der JMH-Runner hat dann dadurch Zugriff auf den SpringContext.
Dies funktioniert allerdings nur wenn ich die Forks auf 0 stelle. Das heißt innerhalb der selben JVM kann der JMH-Runner den SpringContext aus der static Variable holen.
Empfohlen ist es aber mindestens eine separate JVM(Fork=1) zu starten, damit Seiteneffekte eliminiert werden, da der JMH-Runner dann in einer eigenen JVM läuft.
Ich spüre tatsächlich sehr große Auswirkungen auf die Messergebnisse und suche schon ewig nach einer Lösung für das Problem.
Gibt es denn irgendeine Möglichkeit ein Objekt bereitzustellen, auf welches die separat gestartete JVM zugreifen kann?
Danke im Voraus
Folgendes Problem:
Ich nutze das JMH Framework um Spring Boot Tests zu benchmarken.
Spring Boot Tests haben meistens @Autowired Felder, welche in JUnit Tests normalerweise automatisch injected werden.
Wenn ich allerdings JMH nutze um diese Tests zu benchmarken, dann läuft natürlich nicht mehr die JUnit Engine durch die Test-Methoden sondern der JMH-Runner. Und dieser ist absolut nicht dazu in der Lage die @Autowired-Felder zu injecten.
Das Problem und ein Workaround, welches ich in veränderter Form nutze wird hier erklärt:
https://gist.github.com/msievers/ce80d343fc15c44bea6cbb741dde7e45
Ich starte in einer Test-Methode den JMH-Runner, damit das Projekt Continuous Integration erfüllt, das heißt Jenkins oder diverse Tools damit funktionieren.
Bevor ich den JMH-Runner starte setze ich den SpringContext in eine statische Variable.
Der JMH-Runner hat dann dadurch Zugriff auf den SpringContext.
Dies funktioniert allerdings nur wenn ich die Forks auf 0 stelle. Das heißt innerhalb der selben JVM kann der JMH-Runner den SpringContext aus der static Variable holen.
Empfohlen ist es aber mindestens eine separate JVM(Fork=1) zu starten, damit Seiteneffekte eliminiert werden, da der JMH-Runner dann in einer eigenen JVM läuft.
Ich spüre tatsächlich sehr große Auswirkungen auf die Messergebnisse und suche schon ewig nach einer Lösung für das Problem.
Gibt es denn irgendeine Möglichkeit ein Objekt bereitzustellen, auf welches die separat gestartete JVM zugreifen kann?
Danke im Voraus