首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mockserver期望不活动

Mockserver期望不活动
EN

Stack Overflow用户
提问于 2022-02-23 12:06:29
回答 2查看 851关注 0票数 1

上下文是一个Junit测试,安装使用Spring、Mockserver和Camel。

问题是验证的请求的模拟响应在测试期间不匹配。

原木:

代码语言:javascript
复制
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

守则如下:

代码语言:javascript
复制
@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在测试的时候都在运行。但这种被嘲弄的反应应该被触发。

EN

回答 2

Stack Overflow用户

发布于 2022-03-01 16:53:57

我发现spring的上下文是在单元测试本身之前启动Camel逻辑。

因此,在测试中,骆驼路线已经在运行,而模拟服务器的期望也是不可用的。

为了正确测试这种情况,我需要:

  1. 首先防止骆驼路由开始(例如使用Route.configure()方法),
  2. 在Junit测试期间初始化模拟和它们的期望(@在每次测试之前),
  3. ,特别是启用骆驼路由。
票数 1
EN

Stack Overflow用户

发布于 2022-03-08 17:10:19

MockServerExtension通过BeforeAllCallback启动模拟服务器时,另一种方法可能是初始化模拟服务器beforeAll,如下所示:

代码语言:javascript
复制
@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启动之前进行配置。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71236633

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档