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 probar una clase que lee de un archivo.

Puedo definir un par de clases que se encargan de leer diferentes formas desde diferentes tipos de archivo (json, csv, xml) y posiblemente más adelante desde un servicio web.

Se me ha ocurrido crear una interfaz común llamada ShapeReader.

public interface ShapeReader {

List<shapes> readShapes() throws Exception;

}

Tengo un par de clases que implementan esta interfaz.

FlatFileReader

public class FlatFileReader implements ShapeReader {

private static final String filename = "shapes.txt";

@Override
public List<shape> readShapes() throws Exception {

    List<shape> shapes = new ArrayList<>();
    try (BufferedReader reader = new BufferedReader(new InputStreamReader(new ClassPathResource(filename).getInputStream()))) {

        String line;
        while ((line = reader.readLine()) != null) {

             // crear objetos de forma

            );

            shapes.add(shape);
        }

        log.info("Elementos leídos desde el archivo json: " + items);

    }

    catch (Exception e) {
        // manejar error
    }
    return shapes;
}

}

XmlReader

public class XmlReader implements ShapeReader {

private static final String filename = "shapes.xml";

@Override
public List<shape> readShapes() throws Exception {

    List<shape> shapes = new ArrayList<>();
    try (BufferedReader reader = new BufferedReader(new InputStreamReader(new ClassPathResource(filename).getInputStream()))) {

        String line;
        while ((line = reader.readLine()) != null) {

             // crear objetos de forma desde xml

            );

            shapes.add(shape);
        }

        log.info("Elementos leídos desde el archivo json: " + items);

    }

    catch (Exception e) {
        // manejar error
    }
    return shapes;
}

}

No estoy seguro de cómo probar esto. Estaba pensando en leer desde un archivo de prueba falso llamado test.txt, pero el nombre de archivo está codificado como una constante estática. ¿Cuál es la mejor manera de resolver este problema que asumo es un diseño deficiente?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para resolver el problema del nombre de archivo codificado en las clases FlatFileReader y XmlReader, puedes modificar el constructor de ambas clases para aceptar un parámetro de nombre de archivo. De esta manera, puedes pasar el nombre de archivo durante la instanciación del objeto y probar fácilmente las clases con diferentes nombres de archivo.

    Por ejemplo:

    public class FlatFileReader implements ShapeReader{
    
        private final String filename;
    
        public FlatFileReader(String filename) {
            this.filename = filename;
        }
    
        @Override
        public List<shape> readShapes() throws Exception {
    
            List<shape> shapes= new ArrayList<>();
            try(BufferedReader reader = new BufferedReader(new InputStreamReader(new ClassPathResource(filename).getInputStream()))) {
    
                String line ;
                while((line = reader.readLine()) != null){
    
                    // crear objetos Shape
                    Shape shape = new Shape();
    
                    shapes.add(shape);
                }
    
                log.info("Items read from json file: " + items);
    
            }
    
            catch(Exception e) {
                // manejar error
            }
    
            return shapes;
        }
    }
    

    Luego puedes modificar tu código de pruebas para crear los objetos FlatFileReader y XmlReader con diferentes nombres de archivo y probarlos según sea necesario. Además, puedes crear archivos simulados para propósitos de prueba y pasar esos nombres de archivo durante las pruebas.

    Esta modificación reduce la dependencia del nombre de archivo estático y hace que el código sea más flexible y probable.

Comments are closed.