2015-05-27 18 views
8

Ho creato un'applicazione Web in spring-boot. Sto scrivendo un test unitario con testNG per il mio livello aziendale.Test unitario con testNG in avvio a molla richiede tempo per creare il progetto

Ho creato classe Application

@SpringBootApplication 
public class TestApplication 
{ 
    public static void main(String[] args) 
    { 
     SpringApplication.run(TestApplication.class, args); 
    } 

    @Bean 
    Mapper mapper() 
    { 
     List<String> mappingFiles = new ArrayList<String>(); 
     mappingFiles.add("dozer-mappings.xml"); 
     return new DozerBeanMapper(mappingFiles); 
    } 
} 

Le mie lezioni di prova sono assomigliare

@ContextConfiguration(classes = { TestApplication.class }) 
public class CommissionRuleServiceTest extends AbstractTestNGSpringContextTests 
{ 
    @InjectMocks 
    @Autowired 
    MyService 

    @Mock 
    MyDAO; 

    @BeforeMethod 
    public void initMock() 
    { 
      MockitoAnnotations.initMocks(this); 
    } 

    @Test(dataProvider = "....") 
    ...... 
    ...... 
} 

Quando eseguo progetto lo dimostra registro hugh su console e ci vuole tempo dicono 20.00secs solo per alcuni piccoli test. Alcune delle dichiarazioni di log sono,

DEBUG oscisPathMatchingResourcePatternResolver - Annuario Ricerca DEBUG oscaConfigurationClassPostProcessor DEBUG oscaClassPathBeanDefinitionScanner DEBUG oscisPathMatchingResourcePatternResolver DEBUG osbfsDefaultListableBeanFactory DEBUG oacbconverters.ArrayConverter DEBUG org.dozer.loader. xml.XMLParser DEBUG org.hibernate.cfg.SettingsFactory DEBUG ohcfg.annotations.CollectionBinder DEBUG ohcfg.annotations.TableBinder DEBUG o.h.p.w.spi.MetamodelGraphWalker - Visiting percorso attributo: MyEntity DEBUG o.s.b.f.s.DefaultListableBeanFactory DEBUG org.hibernate.SQL

Perché sta prendendo un momento simile "hugh"? Cosa dovrei fare?

risposta

0

L'indagine:

Il @SpringBootApplication annotazione è equivalente ai seguenti annotazioni con attributi predefiniti:

  1. @Configuration - indica che la classe contiene uno o più @Bean metodi. Riproduce insieme a @ComponentScan.

  2. @EnableAutoConfiguration - Tenterà di indovinare e configurare i bean che è probabile che siano necessari. Ciò potrebbe causare una riduzione delle prestazioni a seconda dell'applicazione.

  3. @ComponentScan - Configura la scansione dei componenti. Poiché il pacchetto non è definito, la scansione verrà eseguita dal pacchetto della classe con questa annotazione.

Senza più il codice non è possibile per darvi un'ipotesi precisa, ma credo che la maggior parte della pena di prestazioni è causato da primavera Boot inizializzazione.

0

Per impostazione predefinita, il livello di registrazione è impostato su INFO in Spring Boot, probabilmente lo hai modificato? Aggiungi questo al application.properties o qualsiasi altro livello è necessario (TRACE, DEBUG, INFO, WARN, ERROR, FATAL, OFF)

logging.level.root = WARN

Come è stato detto prima configurazione automatica può impatto sulle prestazioni. Puoi giocare con l'esclusione di alcune configurazioni che non ti servono. Ecco un esempio (insieme casuale - non seguire ciecamente)

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class, 
     DataSourceTransactionManagerAutoConfiguration.class, HibernateJpaAutoConfiguration.class, 
     ErrorMvcAutoConfiguration.class, SecurityAutoConfiguration.class, SessionAutoConfiguration.class, 
     ValidationAutoConfiguration.class, ThymeleafAutoConfiguration.class, WebSocketAutoConfiguration.class, 
     DispatcherServletAutoConfiguration.class, EmbeddedServletContainerAutoConfiguration.class, 
     JmxAutoConfiguration.class, MultipartAutoConfiguration.class, WebMvcAutoConfiguration.class, 
     JacksonAutoConfiguration.class, SpringApplicationAdminJmxAutoConfiguration.class, 
     MessageSourceAutoConfiguration.class, SendGridAutoConfiguration.class, FreeMarkerAutoConfiguration.class, 
     GroovyTemplateAutoConfiguration.class, DeviceDelegatingViewResolverAutoConfiguration.class, 
     SitePreferenceAutoConfiguration.class, MustacheAutoConfiguration.class, 
     PersistenceExceptionTranslationAutoConfiguration.class}) 

per le classi di test mi consiglia di utilizzare

@SpringBootTest(classes = TestApplication.class) 

Inoltre è possibile escludere Tomcat se non ne hai bisogno nella vostra test

<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter</artifactId> 
    <exclusions> 
     <exclusion> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-tomcat</artifactId> 
     </exclusion> 
    </exclusions> 
</dependency> 

e cercare di darci maggiori dettagli

Problemi correlati