Verwenden Sie im Spring Boot den Befehlszeilen-Runner Sie können Anwendungen entwickeln, die über die Befehlszeile ausgeführt werden.
Aber in einer Anwendung, die CommandLineRunner verwendet Wenn Sie einen Test in JUnit ausführen, wird nicht nur der Testcode, sondern auch die Verarbeitung von CommandLineRunner selbst ausgeführt.
Ich fühlte mich ein bisschen verrückt, also wollte ich es irgendwie vermeiden.
Ausführungscode
SampleApplication.java
package com.example.demo;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class SampleApplication implements CommandLineRunner {
public static void main(String[] args) {
SpringApplication.run(SampleApplication.class, args);
}
@Override
public void run(String... arg) {
SampleOutput sample = new SampleOutput();
System.out.println(sample.sayTest());
System.out.println("!!!Sample CommandLineRunner Start!!!");
}
}
SampleOutput.java
package com.example.demo;
public class SampleOutput {
public String sayTest() {
return "test!!";
}
}
Testcode
SampleOutputTest
package com.example.demo;
import static org.junit.Assert.assertEquals;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest
public class SampleOutputTest {
@Test
public void testTest() {
SampleOutput sample = new SampleOutput();
assertEquals("test!!", sample.sayTest());
}
}
Das Ergebnis der Ausführung von JUnit ist wie folgt.
Ausführungsergebnis
07:42:33.780 [main] DEBUG org.springframework.test.context.junit4.SpringJUnit4ClassRunner - SpringJUnit4ClassRunner constructor called with [class com.example.demo.SampleOutputTest]
Kürzung
2018-06-13 07:42:34.458 INFO 6564 --- [ main] s.c.a.AnnotationConfigApplicationContext : Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@2df9b86: startup date [Wed Jun 13 07:42:34 JST 2018]; root of context hierarchy
2018-06-13 07:42:35.128 INFO 6564 --- [ main] com.example.demo.SampleOutputTest : Started SampleOutputTest in 0.972 seconds (JVM running for 1.867)
test!!
!!!Sample CommandLineRunner Start!!!
2018-06-13 07:42:35.190 INFO 6564 --- [ Thread-2] s.c.a.AnnotationConfigApplicationContext : Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@2df9b86: startup date [Wed Jun 13 07:42:34 JST 2018]; root of context hierarchy
Wenn JUnit ausgeführt wird, wird es von CommandLineRunner ausgegeben
test!!
!!!Sample CommandLineRunner Start!!!
Wird ausgegeben. Ich möchte, dass nur der Testcode funktioniert, aber auch CommandLineRunner wurde ausgeführt.
Ich möchte CommandLineRunner nicht ausführen, wenn ich JUnit ausführe, daher werde ich nach einer Möglichkeit suchen, dies zu tun. Versuchen Sie es unter Bezugnahme auf das Folgende. https://stackoverflow.com/questions/29344313/prevent-application-commandlinerunner-classes-from-executing-during-junit-test
Diese Methode entfällt, da der Stapelüberlauf und Qiita leicht verständliche Artikel enthalten. https://qiita.com/ftsan/items/80b00f8fb8129ecbdf97
Ich frage mich jedoch, ob es eine andere Methode gibt Ich habe versucht herauszufinden, ob es einen anderen Weg gibt, den Testcode zu reparieren.
Im Testcode SampleOutputTest.java
Kommentieren Sie "SpringBootTest"
`ContextConfiguration(classes = SampleApplication.class,
initializers = ConfigFileApplicationContextInitializer.class)
Ändern Sie zu "Anmerkung".
SampleOutputTest.java
@RunWith(SpringRunner.class)
@ContextConfiguration(classes = SampleApplication.class,
initializers = ConfigFileApplicationContextInitializer.class)
public class SampleOutputTest {
Wenn Sie den Test jetzt ausführen, können Sie ihn testen, ohne CommandLineRunner auszuführen.
Der Teil classes = SampleApplication.class
gibt die Klasse an, in der sich die Hauptmethode befindet.
Ausführungsergebnis
07:44:49.301 [main] DEBUG org.springframework.test.context.junit4.SpringJUnit4ClassRunner - SpringJUnit4ClassRunner constructor called with [class com.example.demo.SampleOutputTest]
Unten weggelassen
Jetzt können Sie testen, ohne CommandLineRunner auszuführen, indem Sie nur den Testcode ändern. Bedeutet dies, dass "SpringBootTest" verschiedene Einstellungen lädt, "ContextConfiguration" jedoch nicht alle Einstellungen lädt?
https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-testing.html
Wenn Sie dieses Dokument sorgfältig gelesen haben, finden Sie es unter 43.4 Test Utilities.
Es wurde geschrieben, dass Sie dies verwenden sollten, wenn Sie nicht alle Funktionen von SpringBootTest
verwenden müssen.
@ContextConfiguration(classes = Config.class,
initializers = ConfigFileApplicationContextInitializer.class)