我的spring启动应用程序配置了一个数据源,并公开了spring执行器的运行状况和prometheus度量。
应用程序.yml
spring:
datasource:
driver-class-name: org.mariadb.jdbc.Driver
username: ${db.username}
password: ${db.password}
url: jdbc:mariadb://${db.host}:${db.port}/${db.schema}
management:
endpoints:
web:
exposure:
include: 'health, prometheus'
启动应用程序时, /actuator/prometheus
提供包含度量的响应。现在我想为 prometheus
终结点。目前情况如下:
测试等级
@SpringBootTest
@ExtendWith(SpringExtension.class)
@AutoConfigureMockMvc
public class HealthMetricsIT {
@Autowired
private MockMvc mockMvc;
@Test
public void shouldProvideHealthMetric() throws Exception {
mockMvc.perform(get("/actuator/prometheus")).andExpect(status().isOk());
}
}
然而,我在这里遇到了两个问题,我还不知道如何解决它们。
第1期
通过这种设置,测试似乎启动了整个应用程序,从而尝试连接到正在运行的数据库。
测试无法正确启动,因为数据源属性的前缀为 db
未提供。
如何在不打开数据库连接的情况下启动此测试?
第2期
即使我的本地数据库正在运行 db
属性,则测试失败。这次是因为我得到的是HTTP404而不是200。
1条答案
按热度按时间yyhrrdl81#
作为
MockMvc
用于测试SpringMVC组件(您的@Controller
以及@RestController
)我猜您使用的是自动配置的模拟servlet环境@AutoConfigureMockMvc
不会包含任何执行器终结点。相反,您可以编写一个不使用
MockMvc
而是启动嵌入式servlet容器。对于这个测试,您必须确保应用程序启动时所需的所有基础结构组件(数据库等)都可用。
使用testcontainers,您几乎可以毫不费力地为集成测试提供一个数据库。