2017-10-09 65 views
1

我使用Spring启动+弹簧安全+弹簧操动春天启动的驱动器不可用时设置管理端口

我的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或测试配置中设置管理端口?

回答

1

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()); 
    } 
}