Spring Boot2 Test - @SpringBootTests не переходит в мой класс SpringBootApplication

Чтобы упростить код служб - я создал суперкласс для приложения SpringBoot, который затем будет унаследован различными приложениями Spring, что позволит избежать кода базовой платы.

   //No Annotations here
   public class BootApplication extends SpringBootServletInitalizer{

      public static final void startBootApp(String[] args,String[][] 
      customArgs){
             customArgs contains Name-Value Pairs for any customization 
             to spring.config.name or spring.config.location etcetra
            //Optional check on Custom Args 
            ArrayUtils.toMap(customArgs).forEach((k,v) -> Set the System 
            Property
     });
   }


  @Bean  
  public WebserverFactoryCustomizer<TomcatServletWebServerFactory> 
  customizer(){
           return container -> {
               container.setPort(BootApplication.port);
     } 
  }

  private static void getMetaData(Class<?> application){
     //Get Annotation Value of CustomSpringBootMetaData 
     x = application.getAnnotation(CustomSpringBootMetaData.class);
     BootApplication.port=x.port();   
     BootApplication.configName=x.configName();
  }

}//Class Ends
 ************************************************
 @Target(Element.Type)
 @Retention(RetentionPolicy.RUNTIME)
 @Documented
 @Inherited
 public @interface CustomSpringBootMetaData {
      int port() default 8080;
      String configName() default "application";
 }

      **********************************************************
My Application Class 

@CustomSpringBootMetaData (port=8080,configName=myApp)
@SpringBoootApplication(scanBasePackages="cxxxx"
MySpringBootApplication extends BootApplication {  
   //main method
    BootApplication.startBootApp(args,null);//Assume Optional check is there in BootApplication
}

     **********************************************************

My Test Class
@RunWith(SpringRunner.class)
@SpringBootTest(classes={MySpringBootApplication.class}){

  @Test public void test() {..... };

}

Проблема - при запуске Junit Test - путь выполнения не берется Junit, т.е. MyBootApplication->main->BootApplication.startBootApp. При запуске теста он напрямую вызывает настройщик.

Однако путь выполнения (MyBootApplication->BootApplication.startBootApp) берется, когда я загружаю приложение с помощью java -jar xxx.jar или просто maven:spring-boot run

Чего не хватает в моей тестовой конфигурации или каков недостаток дизайна??

0 ответов

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