上下文是一个Junit测试,安装使用Spring、Mockserver和Camel。
问题是验证的请求的模拟响应在测试期间不匹配。
原木:
INFO 1841843 --- [erver-EventLog4] org.mockserver.log.MockServerEventLog : 8087 received request:
{
"method" : "GET",
"path" : "/api/installation/organizations",
"headers" : {
"content-length" : [ "0" ],
"User-Agent" : [ "Java/11.0.13" ],
"Host" : [ "localhost:8087" ],
"Connection" : [ "keep-alive" ],
"Accept" : [ "application/json" ]
},
"keepAlive" : true,
"secure" : false
}
INFO 1841843 --- [erver-EventLog4] org.mockserver.log.MockServerEventLog : 8087 no expectation for:
{
"method" : "GET",
"path" : "/api/installation/organizations",
"headers" : {
"content-length" : [ "0" ],
"User-Agent" : [ "Java/11.0.13" ],
"Host" : [ "localhost:8087" ],
"Connection" : [ "keep-alive" ],
"Accept" : [ "application/json" ]
},
"keepAlive" : true,
"secure" : false
}
returning response:
{
"statusCode" : 404,
"reasonPhrase" : "Not Found"
}
INFO 1841843 --- [ main] b.h.c.route.CsvRouteBuilderTest : Started CsvRouteBuilderTest in 6.17 seconds (JVM running for 8.32)
INFO 1841843 --- [erver-EventLog4] org.mockserver.log.MockServerEventLog : retrieved requests and responses in json that match:
{ }
DEBUG 1841843 --- [ main] b.h.c.route.CsvRouteBuilderTest : RecordedRequestsAndResponses: 12
INFO 1841843 --- [erver-EventLog4] org.mockserver.log.MockServerEventLog : 8087 retrieved 0 active expectations in json that match:
{ }
DEBUG 1841843 --- [ main] b.h.c.route.CsvRouteBuilderTest : activeExpectations: 0
INFO 1841843 --- [erver-EventLog4] org.mockserver.log.MockServerEventLog : retrieved recorded expectations in json that match:
{ }
DEBUG 1841843 --- [ main] b.h.c.route.CsvRouteBuilderTest : recordedExpectations: 0
INFO 1841843 --- [erver-EventLog4] org.mockserver.log.MockServerEventLog : 8087 verifying requests that match:
{
"httpRequest" : {
"method" : "GET",
"path" : "/api/installation/organizations"
},
"times" : {
"atLeast" : 1
}
}
INFO 1841843 --- [erver-EventLog4] org.mockserver.log.MockServerEventLog : request:
{
"method" : "GET",
"path" : "/api/installation/organizations"
}
found at least once守则如下:
@ExtendWith(MockServerExtension.class)
@MockServerSettings(ports = {8087})
@SpringBootTest
@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class})
@DisableJmx
@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_CLASS)
public class CsvRouteBuilderTest {
@Autowired
ProducerTemplate producerTemplate;
private MockServerClient mockServerClient;
@BeforeEach
public void beforeEachLifecyleMethod(MockServerClient client) {
mockServerClient = client;
}
@Before
public void setupMocks() {
mockServerClient
.when(
request().withMethod("GET").withPath(HDConnectProxyRestTemplate.URI_GET_INSTALLATION_ORGANIZATIONS)
.withHeader(Header.header("Accept", MediaType.APPLICATION_JSON.toString())))
.respond(
response("{data}").withContentType(MediaType.APPLICATION_JSON));
}我错过了什么?我看到Camel和Mockserver在测试的时候都在运行。但这种被嘲弄的反应应该被触发。
发布于 2022-03-01 16:53:57
我发现spring的上下文是在单元测试本身之前启动Camel逻辑。
因此,在测试中,骆驼路线已经在运行,而模拟服务器的期望也是不可用的。
为了正确测试这种情况,我需要:
发布于 2022-03-08 17:10:19
当MockServerExtension通过BeforeAllCallback启动模拟服务器时,另一种方法可能是初始化模拟服务器beforeAll,如下所示:
@BeforeAll
static void setupMocks(MockServerClient mockServerClient) {
mockServerClient
.when(
request().withMethod("GET").withPath(HDConnectProxyRestTemplate.URI_GET_INSTALLATION_ORGANIZATIONS)
.withHeader(Header.header("Accept", MediaType.APPLICATION_JSON.toString())))
.respond(
response("{data}").withContentType(MediaType.APPLICATION_JSON));
}这样,您的模拟服务器将在Camel启动之前进行配置。
https://stackoverflow.com/questions/71236633
复制相似问题