Как протестировать метод Spring Boot main ()?

@RunWith(SpringRunner.class)
@SpringBootTest
public class BankMainAppTest {

    /**
     * Test App load without throwing an exception.
     */
    @Test
    public void contextLoads() {
    }//pass

    @Test
    public void applicationStarts() {
        BankMainApp.main(new String[] {});
    }//fail throw exception given below..
}

java.lang.IllegalArgumentException: Cannot instantiate factory class: org.springframework.boot.env.EnvironmentPostProcessor

зачем тебе это? если приложение работает, можно с уверенностью сказать, что основной метод работает

Stultuske 21.01.2019 12:58

Возможный дубликат stackoverflow.com/questions/46650268/…

Sudhir Ojha 21.01.2019 13:02

@Stultuske Согласно опубликованному коду, вероятно, для освещения (неправильная причина, по которой я согласен).

davidxxx 21.01.2019 13:08
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
3
4 884
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Либо аннотируйте тестовый класс с помощью @SpringBootTest и объявите пустой тестовый метод, либо не аннотируйте тестовый класс, а вызовите метод main() в тестовом методе.
Но не делайте и то, и другое.
Здесь вы это делаете, и он запускает один контейнер (до выполнения теста), а затем другой (в методе test).

Обратите внимание, что если вам не нужно делать никаких утверждений, потому что тест предназначен только для коэффициента покрытия, идиома для использования — это второй способ:

public class BankMainAppIT {
   @Test
   public void main() {
      BankMainApp.main(new String[] {});
   }
}

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