2016-07-21 115 views
3

最近我更改了我的彈簧引導屬性以定義管理端口。 這樣做,我的單元測試啓動失敗:(指定端口時Spring Boot Actuator端點的單元測試不起作用

我寫的測試/度端點如下單元測試:

@RunWith (SpringRunner.class) 
@DirtiesContext 
@SpringBootTest 
public class MetricsTest { 

    @Autowired 
    private WebApplicationContext context; 

    private MockMvc mvc; 

    /** 
    * Called before each test. 
    */ 
    @Before 
    public void setUp() { 
     this.context.getBean(MetricsEndpoint.class).setEnabled(true); 
     this.mvc = MockMvcBuilders.webAppContextSetup(this.context).build(); 
    } 

    /** 
    * Test for home page. 
    * 
    * @throws Exception On failure. 
    */ 
    @Test 
    public void home() 
      throws Exception { 
     this.mvc.perform(MockMvcRequestBuilders.get("/metrics")) 
       .andExpect(MockMvcResultMatchers.status().isOk()); 
    } 
}   

以前這被通過之後補充說:

management.port=9001 

測試開始與失敗:

home Failed: java.lang.AssertionError: Status expected: <200> but was: <404> 

我試圖改變@SpringBootTest註釋:

@SpringBootTest (properties = {"management.port=<server.port>"}) 

凡用於server.port數量。這似乎沒有任何區別。

然後,將屬性文件中的management.port值更改爲與server.port相同。同樣的結果。

讓測試工作的唯一方法是從屬性文件中刪除management.port。

任何建議/想法?利用在@SpringBootTest註釋中定義

@SpringBootTest(properties = {"management.port="}) 

屬性

由於

+0

因此,爲成功和失敗案例添加一些跟蹤日誌記錄。在成功案例中,我看到以下內容: 'TRACE [Test worker] --- org.springframework.test.web.servlet.TestDispatcherServlet:測試處理程序映射[org.s[email protected]2281521a在DispatcherServlet的名稱爲' 這是缺少失敗的情況下..所以我只能假設,我使用了錯誤的值 'MockMvcBuilders.webAppContextSetup(this.context)' – WHGIBBO

回答

-1

嘗試具有higher precedence比在應用程序屬性。 "management.port="將「取消」management.port屬性。
這樣您就不必擔心在測試中配置端口。

+1

您可以加入一些解釋你的答案好嗎? – DimaSan

0

有同樣的問題,你只需要在你的application-test.properties(將其設置爲空值)

management.port= 

加入這使management.port空確保您使用的測試配置文件在你的JUnit中通過註釋類

@ActiveProfiles("test") 
相關問題