test - pruebas unitarias java netbeans
La prueba unitaria con testNG en el arranque de primavera toma tiempo para construir un proyecto (2)
La investigación:
La anotación @SpringBootApplication
es equivalente a las siguientes anotaciones con atributos predeterminados:
@Configuration
- Indica que la clase contiene uno o más métodos@Bean
. Juega junto con@ComponentScan
.@EnableAutoConfiguration
- Intentará adivinar y configurar los beans que probablemente necesite. Esto puede causar una cierta penalización de rendimiento dependiendo de su aplicación.-
@ComponentScan
- Configura el escaneo de componentes. Como el paquete no está definido, el escaneo se realizará desde el paquete de la clase con esta anotación.
Sin más código no es posible dar una estimación precisa, pero creo que la mayor parte de la penalización del rendimiento se debe a la inicialización de Spring Boot .
He creado una aplicación web en Spring-boot. Estoy escribiendo una unidad de pruebas con testNG para mi capa de negocios.
He creado una clase de aplicación
@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);
}
}
Mis clases de prueba son como
@ContextConfiguration(classes = { TestApplication.class })
public class CommissionRuleServiceTest extends AbstractTestNGSpringContextTests
{
@InjectMocks
@Autowired
MyService
@Mock
MyDAO;
@BeforeMethod
public void initMock()
{
MockitoAnnotations.initMocks(this);
}
@Test(dataProvider = "....")
......
......
}
Cuando ejecuto el proyecto, muestra la gran cantidad de inicios de sesión en la consola y tarda unos 20.00 segundos en unas pocas pruebas pequeñas. Algunas de las declaraciones del registro son,
DEBUG oscisPathMatchingResourcePatternResolver - directorio de búsqueda DEBUG DEBUG oscaConfigurationClassPostProcessor oscaClassPathBeanDefinitionScanner DEBUG DEBUG oscisPathMatchingResourcePatternResolver osbfsDefaultListableBeanFactory DEBUG DEBUG oacbconverters.ArrayConverter org.dozer.loader.xml.XMLParser DEBUG DEBUG org.hibernate.cfg.SettingsFactory ohcfg.annotations.CollectionBinder DEBUG DEBUG ohcfg.annotations.TableBinder ohpwspi. MetamodelGraphWalker - Ruta del atributo de visita: MyEntity DEBUG osbfsDefaultListableBeanFactory DEBUG org.hibernate.SQL
¿Por qué se está tomando un tiempo tan "hugh"? ¿Qué debería hacer?
Por defecto, el nivel de registro está establecido en INFO en Spring Boot, ¿probablemente lo cambió? Agregue esto a application.properties o cualquier otro nivel que necesite (TRACE, DEBUG, INFO, WARN, ERROR, FATAL, OFF)
logging.level.root = WARN
Como se dijo antes, la configuración automática puede afectar el rendimiento. Puede jugar excluyendo algunas configuraciones que no necesita. Aquí hay un ejemplo (conjunto aleatorio: no seguir ciegamente)
@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})
para las clases de prueba, recomendaría usar
@SpringBootTest(classes = TestApplication.class)
también puede excluir Tomcat si no lo necesita en sus pruebas
<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>
y trata de darnos más detalles