spring-boot - 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
解决方案
推荐阅读
- javascript - JavaScript 获取所选项目的 TextContent
- r - 如何使用 ggplot2 中的 geom_segment() 按组连接多个点?
- javascript - 暂停 window.location.replace 直到在另一个选项卡中看到/单击警报
- java - Thymeleaf 中的多个 if else 条件
- wix - 可重复构建的 Wix 工具集构建优化
- javascript - Android文件上传的Facebook浏览器损坏
- firebase - IOS 应用请求上的 Admob 广告,但不给人留下深刻印象
- java - 如何围绕不强制执行某个 spring-boot 版本的 spring-boot 构建一个库?
- reactjs - Typescript & Gatsby:gatsby-plugin-ts + graphQL 查询集成
- python - VsCode 中的 Matplotlib 使用 1e6 和整数显示图形,而不是我当前练习所需的浮点数。(Python 速成课程)