es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo realizar pruebas unitarias de Spring PostConstruct y cambiar las propiedades de la aplicación.

Creé una pequeña aplicación que en la inicialización carga un archivo de Excel usando openCsv en el método init. La aplicación carga mi archivo de Excel desde la ruta que proporcioné en application.properties.

Ahora quiero hacer algunas pruebas para ello. ¿Cómo puedo probar este escenario? Quiero crear un archivo de Excel en cada prueba pero con un valor diferente y ver si carga mi archivo de Excel correctamente.

Servicio

public class ReaderService {

private List<Person> personDetailsList;

@Value("${file.path}")
String filePath;


@PostConstruct
public void init() throws IOException {

    personDetailsList = new CsvToBeanBuilder<Person>(new FileReader(filePath))
            .withType(Person.class).build().parse();


}

public StatisticReport calcularEstadisticas() {
    Integer firstNameNullCounter = 0;
    Integer lastNameNullCounter = 0;
    Integer ageNullCounter= 0;

   for(Person person : personDetailsList){
       if(person.getFirstName().equals("") || person.getFirstName() == null) {
           firstNameNullCounter++;
       }
       if(person.getLastName().equals("") || person.getLastName() == null) {
           lastNameNullCounter++;
       }
       if(person.getAge() == null){
           ageNullCounter++;
       }
    }

   return new StatisticReport(firstNameNullCounter,lastNameNullCounter,ageNullCounter,calculateAverage());
}

public double calculateAverage(){
    return personDetailsList.stream()
            .map(p -> p.getAge() == null ? new Person(p.getFirstName(),p.getLastName(),0) : p)
            .collect(Collectors.averagingDouble(Person::getAge));
}

}

application.properties:

file.path=…alguna ruta…\data.csv

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para probar este escenario, puedes usar JUnit y crear una clase de prueba que extienda la clase SpringBootTest. Dentro de esta clase, puedes crear métodos de prueba que creen diferentes archivos de Excel con distintos valores, y luego comprobar si tu aplicación los carga correctamente.

    Aquí tienes un ejemplo de clase de prueba:

    import org.junit.jupiter.api.Test;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.context.SpringBootTest;
    
    import java.io.File;
    import java.io.FileWriter;
    import java.io.IOException;
    
    import static org.junit.jupiter.api.Assertions.assertEquals;
    
    @SpringBootTest
    public class ReaderServiceTest {
    
        @Autowired
        private ReaderService readerService;
    
        @Test
        public void testLoadExcel() throws IOException {
            // crear un archivo de prueba CSV
            String testFilePath = "test.csv";
            File file = new File(testFilePath);
            FileWriter writer = new FileWriter(file);
            writer.write("John,Doe,25\n");
            writer.write("Jane,Smith,\n");
            writer.flush();
            writer.close();
    
            // establecer la propiedad file.path en la ruta del archivo de prueba
            String oldFilePath = readerService.getFilePath();
            readerService.setFilePath(testFilePath);
    
            // llamar al método init para cargar el archivo de prueba
            readerService.init();
    
            // comprobar que el archivo se carga correctamente
            assertEquals(2, readerService.getPersonDetailsList().size());
            assertEquals("John", readerService.getPersonDetailsList().get(0).getFirstName());
            assertEquals("Smith", readerService.getPersonDetailsList().get(1).getLastName());
    
            // restablecer la propiedad file.path al valor original
            readerService.setFilePath(oldFilePath);
    
            // borrar el archivo de prueba
            file.delete();
        }
    
    }
    

    En esta clase de prueba, primero creamos un archivo CSV de prueba con dos registros, uno de los cuales tiene un apellido faltante. Luego, establecemos la propiedad file.path del readerService en la ruta del archivo de prueba y llamamos al método init para cargar el archivo. Luego comprobamos si el archivo se cargó correctamente comprobando el número de registros y los valores del primer y segundo registro.

    Finalmente, restablecemos la propiedad file.path al valor original y eliminamos el archivo de prueba. Esto asegura que las pruebas posteriores no se vean afectadas por esta prueba.

    Puedes crear múltiples métodos de prueba como este, cada uno con un archivo y datos de prueba diferentes, y comprobar que tu aplicación los carga correctamente.

Comments are closed.