Я написал простое приложение командной строки для загрузки Spring. Я реализую модульный тест, но выяснил, что приложение тоже запущено. Как это остановить?
Основное приложение
@SpringBootApplication
public class Application {
@Bean
public CommandLineRunner demo(TransactionLogRepository repository) {
return (args) -> {
log.info("Application starts");
Контрольная работа
@RunWith(SpringRunner.class)
@SpringBootTest
public class ApplicationTests {
@Autowired
private ComputeBrand normalizer;
@Test
public void test() {
log.info("Test starts");
Журналы
16:27:12.791 [main] DEBUG org.springframework.test.context.junit4.SpringJUnit4ClassRunner - SpringJUnit4ClassRunner constructor called with [class ApplicationTests]
2018-06-21 16:27:14.874 INFO 40980 --- [ main] .v.c.ApplicationTests : Starting ApplicationTests on DSCX516258 with PID 40980 (started by leos.literak
2018-06-21 16:27:14.877 INFO 40980 --- [ main] .v.c.ApplicationTests : No active profile set, falling back to default profiles: default
2018-06-21 16:27:14.939 INFO 40980 --- [ main] s.c.a.AnnotationConfigApplicationContext : Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@13f17eb4: startup date [Thu Jun 21 16:27:14 CEST 2018]; root of context hierarchy
2018-06-21 16:27:22.485 INFO 40980 --- [ main] .v.c.ApplicationTests : Started ApplicationTests in 8.45 seconds (JVM running for 11.151)
2018-06-21 16:27:22.513 INFO 40980 --- [ main] c.a.p.v..Application : Application starts
2018-06-21 16:27:23.373 INFO 40980 --- [ main] c.a.p.v.c.ApplicationTests : Test starts
В чем проблема?
Я хочу, чтобы все контексты были инициализированы. Но я не вижу в этом предложении, что приложение запущено. Можно как-нибудь этого избежать? Например. написать тест иначе, что контекст есть, а метод приложения не выполняется?




Я создал следующее обходное решение:
application.properties
unitTest=false
Заявление
@SpringBootApplication
public class Application {
@Value("${unitTest}")
boolean unitTest = false;
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Bean
public CommandLineRunner processTransactions(TransactionLogRepository repository) {
return (args) -> {
if (unitTest) {
return;
}
Работает по назначению. Из документации по тестированию: «Spring Boot предоставляет аннотацию
@SpringBootTest, которую можно использовать в качестве альтернативы стандартной аннотации@ContextConfigurationдля весенних тестов, когда вам нужны функции Spring Boot. Аннотация работает путем создания ApplicationContext, используемого в ваших тестах через SpringApplication». docs.spring.io/spring-boot/docs/current/reference/html/…