2017-10-09 64 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()); 
    } 
}