Utilice Mockito y junit de imágenes de prueba

marca:

Tengo un método que recibe como parámetro un objeto MultipartFile. Dentro del método que utilizo ImageIO.read(some_value)y ImageIO.write(some_value). Quiero probar este método con una imagen imaginaria (no quiero tener las imágenes almacenadas en la carpeta de recursos).

He intentado esto: MockMultipartFile file = new MockMultipartFile("file", "boat.jpg", "image/jpeg", "content image".getBytes());pero sin éxito.

public void f(MultipartFile file) throws IOException {
    final BufferedImage read = ImageIO.read(new ByteArrayInputStream(file.getBytes()));
    try (ByteArrayOutputStream baos = new ByteArrayOutputStream()) {
        ImageIO.write(read, "jpg", baos);
    }
 }

Cuando ejecuto la prueba de la readvariable tiene nullvalor. Creo que el problema viene de "content image".getBytes().

¿Hay alguna posibilidad de utilizar imágenes simuladas en vez de los de verdad?

OOBalance:

"content image".getBytes()devuelve una byte[]representación de la cadena "content image". ¿Cómo se ImageIOsupone que la construcción de una BufferedImagede eso?

Usted tiene dos opciones aquí.

  1. Pasar una byte[]de los datos reales deMockMultipartFile
    • Ya que ha mencionado usted no desea utilizar recursos de imágenes simuladas, esto no parece ser un buen ajuste.
  2. Mock ImageIOmétodos estáticos 's utilizando Powermock
    • El método burlado volverá un verdadero BufferedImagesu método se puede utilizar, sin tener que leer una imagen desde un archivo.
    • Esto le da la ventaja añadida de ser capaz de burlarse de la llamada a write()así, si lo desea.
    • Código de muestra:
PowerMockito.mockStatic(ImageIO.class);

when(ImageIO.read(any())).thenAnswer(invocation -> {
    Object argument = invocation.getArguments()[0];
    // here you can check what arguments you were passed

    BufferedImage result = new BufferedImage(600, 400, BufferedImage.TYPE_INT_RGB); // create a BufferedImage object
    // here you can fill in some data so the image isn't blank

    return result;
});

Ahora, cuando su método en llamadas de prueba imageIO.read(), que recibirá el BufferedImageque la construcción de la lambda, sin llegar a la lectura de los archivos.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=218047&siteId=1
Recomendado
Clasificación