gpt4 book ai didi

java - 在测试 AsyncRestTemplate 时防止期望已经声明异常

转载 作者:行者123 更新时间:2023-12-03 17:43:19 27 4
gpt4 key购买 nike

如何测试 AsyncRestTemplate 请求并避免 java.lang.IllegalStateException: Expectations already declared 异常?单个测试用例不一致地抛出异常。


Java.lang.IllegalStateException:预期已经声明
在 org.springframework.util.Assert.state(Assert.java:70)
在 org.springframework.test.web.client.SimpleRequestExpectationManager.afterExpectationsDeclared(SimpleRequestExpectationManager.java:47)
在 org.springframework.test.web.client.AbstractRequestExpectationManager.validateRequest(AbstractRequestExpectationManager.java:73)
在 org.springframework.test.web.client.MockRestServiceServer$MockClientHttpRequestFactory$1.executeInternal(MockRestServiceServer.java:289)
在 org.springframework.mock.http.client.MockClientHttpRequest.execute(MockClientHttpRequest.java:94)
在 org.springframework.mock.http.client.MockAsyncClientHttpRequest.executeAsync(MockAsyncClientHttpRequest.java:50)
在 org.springframework.web.client.AsyncRestTemplate.doExecute(AsyncRestTemplate.java:503)
在 org.springframework.web.client.AsyncRestTemplate.execute(AsyncRestTemplate.java:463)
在 org.springframework.web.client.AsyncRestTemplate.getForEntity(AsyncRestTemplate.java:217)
在 com.company.MainClient.getStatus(MainClient.java:151)
在 com.company.MainController.status(MainController.java:88)

该应用程序聚合来自多个下游系统的数据。要求它提出几个请求。一些请求是与稍后处理的 Future 异步发出的。其他请求通过立即调用 asyncRestTemplateResponse.get() 来阻塞主线程。

以下测试导致错误:

Note: Server is MockRestServiceServer

@Test
public void statusTest() throws Exception {
cServer.expect(once(),requestTo("http://localhost:8080/heartbeat"))
.andRespond(withSuccess(cStatus, MediaType.APPLICATION_JSON));

cpServer.expect(once(),requestTo("http://localhost:8081/status"))
.andRespond(withSuccess(cpStatus, MediaType.APPLICATION_JSON));

tServer.expect(once(),requestTo("http://localhost:3030/check"))
.andRespond(withSuccess(tStatus, MediaType.TEXT_PLAIN));

tServer.expect(once(),requestTo("http://localhost:3031/check"))
.andRespond(withSuccess(tStatus, MediaType.TEXT_PLAIN));

tServer.expect(once(),requestTo("http://localhost:3032/check"))
.andRespond(withSuccess(tStatus, MediaType.TEXT_PLAIN));

mockMvc.perform(get("/status").with(user(USERNAME).password(PASSWORD).roles("T_CLIENT")))
.andDo(print()).andExpect(status().isOk())
.andExpect(jsonPath("$.code").value("200"))
.andExpect(jsonPath("$.appDescription").value("Main Service"))
.andExpect(jsonPath("$.gateways[?(@.responseCode =~ /200/)]").isArray());

//Test without basic auth
mockMvc.perform(get("/status"))
.andDo(print()).andExpect(status().isUnauthorized());
}

最佳答案

根据上面 Eric Pabst 的注释,https://jira.spring.io/browse/SPR-16132似乎认为这是一个问题。我正在使用 Brussels-SR5。我将 属性设置为 4.3.13.RELEASE,问题就消失了。

关于java - 在测试 AsyncRestTemplate 时防止期望已经声明异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45675139/

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