gpt4 book ai didi

java - 设置管理端口时Spring Boot的执行器不可用

转载 作者:行者123 更新时间:2023-11-30 02:21:39 25 4
gpt4 key购买 nike

我使用 Spring boot + Spring Security + Spring Actuator

我的 JUnit 测试类:

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

@Autowired
private MockMvc mockMvc;

@Test
@WithMockUser(roles={"USER","SUPERUSER"})
public void getHealth() throws Exception {
mockMvc.perform(get("/health"))
.andExpect(status().isOk());
}

}

没问题,但是当我设置management.port: 8088时,我的测试结果是 KO,并显示以下消息:

[ERROR]   ActuatorTests.getHealth:37 Status expected:<200> but was:<404>

如何在 JUnit 测试 MockMvc 或测试配置中设置管理端口?

最佳答案

management.portserver.port不同时,Spring将创建一个单独的Web应用程序上下文和一个专用的servlet容器,它将在其中注册所有执行器。默认的 MockMvc 针对主应用程序 Web 上下文而不是管理上下文路由请求。这就是您的情况所发生的情况 - 由于主应用程序 Web 上下文中没有运行执行器,因此您会得到 404。要测试在管理上下文中运行的端点,请使用以下设置:

@RunWith(SpringRunner.class)
@SpringBootTest
public class ManagementContextMvcTest {

@Autowired
private ManagementContextResolver resolver;

private MockMvc mockMvc;

@Before
public void setUp() {
this.mockMvc = MockMvcBuilders.webAppContextSetup(
(WebApplicationContext) resolver.getApplicationContext()).build();
}

@Test
@WithMockUser(roles = { "USER", "SUPERUSER" })
public void getHealth() throws Exception {
mockMvc.perform(get("/health"))
.andExpect(status().isOk());
}
}

关于java - 设置管理端口时Spring Boot的执行器不可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46654505/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com