![](/img/trans.png)
[英]Spring Boot: @GetMapping with Pageable as request parameter don't work as expected
[英]Spring Boot Test: Expected request don't persist using ExpectedCount.manyTimes()
我正在嘗試對我的代碼運行一些集成測試,並使用spring-boot-test
中的MockRestServiceServer
來設置預期的請求。
我有一個在運行測試時被多次調用的電話,但在測試期間似乎沒有持續存在。 我的測試如下所示:
@Test
void getHealthStatus() {
try {
RequestBuilder request = get("/actuator/hc").contentType("application/json");
MockServerBinder.bindPersistentThingworxPropertiesCall(
mockServer,
requestTo(new URI(String.format("%sProperties/TestProp", thingworxUrl))),
objectMapper.writeValueAsString(new PingResponse(DashboardIndicator.HEALTHY, 200))
);
DashboardStatusModel expectedResult = new DashboardStatusModel();
expectedResult.addResult("spring",service.getAppHealth());
expectedResult.addResult("thingworx", service.getThingworxAvailability());
assertOpenUrl(request);
MvcResult result = mockMvc.perform(get("/actuator/hc").contentType("application/json"))
.andExpect(status().isOk())
.andReturn();
DashboardStatusModel actualResult = objectMapper.readValue(result.getResponse().getContentAsString(), DashboardStatusModel.class);
assertEquals(expectedResult.getResults().get("spring"), actualResult.getResults().get("spring"));
assertEquals(expectedResult.getResults().get("thingworx").getStatus(),actualResult.getResults().get("thingworx").getStatus());
assertEquals(expectedResult.getResults().get("thingworx").getData().get("url"), actualResult.getResults().get("thingworx").getData().get("url"));
} catch (Exception e) {
fail("Unable to perform REST call on GDP-API", e);
}
}
作為附加信息:
mockServer
是在這樣的超類中創建的:protected static MockRestServiceServer mockServer;
@BeforeEach
public void configureMockServer() {
mockServer = MockRestServiceServer.bindTo(restTemplate).ignoreExpectOrder(true).build();
}
MockServerBinder.bindPersistentThingworxPropertiesCall()
是一個幫助器 class,如下所示:public static void bindPersistentThingworxPropertiesCall(MockRestServiceServer mockServer, RequestMatcher request, String responseJSONasString){
mockServer.expect(ExpectedCount.once(), request)
.andExpect(method(HttpMethod.GET))
.andRespond(withStatus(HttpStatus.OK)
.contentType(MediaType.APPLICATION_JSON)
.body(responseJSONasString));
}
assertOpenUrl(request);
是一個 function ,它使用MockMVC
檢查 URL 是否沒有任何身份驗證:public void assertOpenUrl(RequestBuilder request){
try{
mockMvc.perform(request).andExpect(status().isOk());
} catch (Exception e) {
fail("Unable to perform REST call on GDP-API", e);
}
}
當我運行這個測試時, expectedResult.addResult("thingworx", service.getThingworxAvailability());
將能夠使用MockRestServiceServer
,但assertOpenUrl(request);
行將失敗,因為MockRestServiceServer
不再期望調用綁定在MockServerBinder.bindPersistantThingworxPropertyCall()
中的端點。 如果我將MockServerBinder.bindPersistantThingworxPropertyCall()
復制並粘貼到現有的下面,則不會發生這種情況,所以我認為這是我如何首先綁定請求的問題。
據我了解, ExpectedCount.manyTimes()
應該在測試期間保留此請求。 這不是真的,還是有另一種方法我應該綁定我的請求,以便它在整個測試期間保持可用?
PEBCAK 問題。
正如您在bindPersistentThingworxPropertiesCall()
中看到的那樣,我實際上沒有使用ExpectedCount.manyTimes()
。 我沒聽懂。 改變了它,現在它可以工作了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.