example component bean annotation java spring annotations postconstruct

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:

  1. 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 )
  2. 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
  3. Simplemente new FileListService() con el new FileListService() e inyecte las dependencias usted mismo
  4. Arranque Spring usando un archivo / clase de configuración diferente, sin utilizar la configuración de anotación.