Тест загрузки Spring запускает приложение

Я написал простое приложение командной строки для загрузки 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

В чем проблема?

Работает по назначению. Из документации по тестированию: «Spring Boot предоставляет аннотацию @SpringBootTest , которую можно использовать в качестве альтернативы стандартной аннотации @ContextConfiguration для весенних тестов, когда вам нужны функции Spring Boot. Аннотация работает путем создания ApplicationContext, используемого в ваших тестах через SpringApplication». docs.spring.io/spring-boot/docs/current/reference/html/…

The Head Rush 21.06.2018 16:46

Я хочу, чтобы все контексты были инициализированы. Но я не вижу в этом предложении, что приложение запущено. Можно как-нибудь этого избежать? Например. написать тест иначе, что контекст есть, а метод приложения не выполняется?

Leos Literak 21.06.2018 16:58
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
2
696
1

Ответы 1

Я создал следующее обходное решение:

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;
            }

Другие вопросы по теме