java - component - Cómo deshabilitar @PostConstruct en Spring durante la prueba
spring boot postconstruct example (2)
Como no está probando FileListService
sino una clase dependiente, puede simularlo para las pruebas. Haga una versión simulada en un paquete de prueba separado que se escanea solo por contexto de prueba. @Primary
con la anotación @Primary
por lo que tiene prioridad sobre la versión de producción.
Dentro de un componente de primavera, tengo una declaración @PostConstruct
. Similar a abajo:
@Singleton
@Component("filelist")
public class FileListService extends BaseService {
private List listOfFiles = new Arrays.list();
//some other functions
@PostConstruct
public void populate () {
for (File f : FileUtils.listFiles(new File(SystemUtils.JAVA_IO_TMPDIR), new String[]{"txt"},true)){
listOfFiles.add(f.getName());
}
}
@Override
public long count() throws DataSourceException {
return listOfFiles.size();
}
// more methods .....
}
Durante las pruebas de la Unidad no me gustaría que se @PostConstruct
función @PostConstruct
, ¿hay alguna forma de decirle a Spring que no realice el procesamiento posterior? ¿O hay una mejor anotación para llamar a un método de iniciación en una clase durante la no prueba?
Cualquiera de:
- Subclass
FileListService
en su prueba y anule el método para no hacer nada (como dice mrembisz, debería colocar la subclase en el paquete escaneado solo para pruebas y marcarlo como@Primary
) - Cambie
FileListService
para que la lista de archivos sea inyectada por Spring (este es un diseño más limpio de todos modos), y en sus pruebas, inyecte una lista vacía - Simplemente
new FileListService()
con elnew FileListService()
e inyecte las dependencias usted mismo - Arranque Spring usando un archivo / clase de configuración diferente, sin utilizar la configuración de anotación.