微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用@WebMvcTest连接千分尺

如何解决如何使用@WebMvcTest连接千分尺

我正在尝试测试Spring Boot 2.3 @Controller,该启动器通过带有@WebMvcTest的Actuator / Prometheus执行度量。不幸的是,这对于NPE失败,可能是因为测试中不存在Micrometer / Prometheus类。

控制器执行

Counter.builder(COUNTER_STATUS)
        .description(DESCRIPTION_STATUS)
        .tags(TAG_ACCOUNT,String.valueOf(accountId),TAG_STATUS,String.valueOf(status))
        .register(registry)
        .increment();

测试有

@ExtendWith(SpringExtension.class)
@ExtendWith(MockitoExtension.class)
@WebMvcTest(HerodotusController.class)

  @MockBean(MeterRegistry.class)
  private MeterRegistry meterRegistry;

此操作失败,在Counter行的NPE处;我相信,因为在测试运行时没有该接口的实现(在运行时由io.micrometer:micrometer-registry-prometheus实现)。

如何在我的测试中实现Micrometer接口的实现,以便其通过?

解决方法

问题出在嘲笑的MeterRegistry

NPE发生在这里:

public Counter register(MeterRegistry registry) {
  return registry.counter(new Meter.Id(name,tags,baseUnit,description,Type.COUNTER));
}

解决方案是不模拟 MeterRegistry,而是通过以下方式提供一个

@TestConfiguration
static class AdditionalConfig {
  @Bean
  public MeterRegistry registry() {
    return new SimpleMeterRegistry();
  }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。