首页 > 解决方案 > Spring 控制器单元测试失败

问题描述

我在为 Spring 控制器运行单元测试时收到以下错误:原因:com.mysql.cj.jdbc.exceptions.CommunicationsException:通信链路故障。我的目的是为 imagecontroller 编写单元测试用例。也建议任何其他替代方案。图像控制器使用存储在数据库中的 file_path 使用 image_key(Primary Key) 从 docker 容器卷返回文件,并将其呈现在 localhost 服务器中:http://localhost:8081/e46713403433b7ceee07bf1d996f86fd。该文件正在下载。

这是我的 ImageController 类

@RestController
@RequestMapping
@CrossOrigin(origins = "http://localhost:3001")
public class ImageController {

    @Autowired
    private ImageRepository imageRepository;

    // Return the image from the database using ResponseEntity

    @GetMapping("/{id}")
    public ResponseEntity<InputStreamResource> fromDatabaseAsResEntity(@PathVariable("id") String image_key)
            throws SQLException, IOException {
        Optional<DicomImage> imagePath = imageRepository.findById(image_key);
        ArrayList<DicomImage> parsedPath = new ArrayList<>();
        imagePath.ifPresent(parsedPath::add);
        String stringPath = parsedPath.get(0).getPath();
        String b = stringPath.substring(stringPath.indexOf('/') + 1);
        File dicomImage = new File("/usr/src/app/dicom_images/" + stringPath);
        InputStreamResource returnImage = null;
        if(dicomImage != null) {
            returnImage = new InputStreamResource(new FileInputStream(dicomImage));

        } else {
            System.out.println("File not found");
        }
        return ResponseEntity.ok().contentType(MediaType.APPLICATION_OCTET_STREAM).body(returnImage);

    }

}

这是 ImageControllerTest 类

@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class ImageControllerTest {

    @Autowired
    private MockMvc mockMvc;
    
    private ImageRepository imageRepository;
    private ImageController imageController;
    

    @Test
    public void shouldReturnDefaultMessage() throws Exception {
        this.mockMvc.perform(get("/e46713403433b7ceee07bf1d996f86fd")).andDo(print()).andExpect(status().isOk())
                .andExpect(content().contentType(MediaType.APPLICATION_OCTET_STREAM));
    }
}

这是我的数据库: Dockerised Mysql 数据库

这是服务器: http://localhost:8081/e46713403433b7ceee07bf1d996f86fd

应用程序属性:

# MySQL database connection strings
spring.datasource.url=jdbc:mysql://pb_mysql:3306/test
spring.datasource.username=pb
spring.datasource.password=pb@123
# JPA property settings
spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.show_sql=true

码头工人组成:

version: '2'
services:
  dicom_viewer:
    container_name: dicom_viewer
    image: sample
    ports:
    - 8081:8080
    depends_on:
    - pb_mysql
    environment:
      SPRING_DATASOURCE_URL: jdbc:mysql://pb_mysql:3306/test
      SPRING_DATASOURCE_USERNAME: pb
      SPRING_DATASOURCE_PASSWORD: pb@123
    volumes:
    - ./dicom_images:/usr/src/app/dicom_images
  pb_mysql:
    container_name: pb_mysql
    restart: always
    image: mysql/mysql-server:latest
    ports:
    - 3308:3306
    environment:
      MYSQL_ROOT_PASSWORD: root123
      MYSQL_USER: pb
      MYSQL_PASSWORD: pb@123
    volumes:
    - sql-datavolume:/var/lib/mysql
  patient_browser:
    container_name: patient_browser
    restart: always
    image: patient_browser
    ports:
    - 8080:8080
    volumes:
    - ./dicom_images:/usr/src/app/dicom_images
  frontend:
    container_name: frontend
    restart: always
    image: frontend
    ports:
    - 3001:3000
volumes:
  sql-datavolume: null

标签: spring-bootdockerunit-testingdocker-composemockmvc

解决方案


推荐阅读