【问题标题】:How to wire up Micrometer with @WebMvcTest如何使用@WebMvcTest 连接千分尺
【发布时间】:2021-02-14 22:48:53
【问题描述】:

我正在尝试通过带有 @WebMvcTest 的 Actuator/Prometheus 来测试 Spring Boot 2.3 @Controller。不幸的是,这在 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 接口以使其通过?

【问题讨论】:

    标签: java spring-boot junit resttemplate spring-micrometer


    【解决方案1】:

    问题是被嘲笑的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();
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-20
      • 2020-07-23
      • 1970-01-01
      • 2019-06-27
      • 2021-01-27
      • 2019-04-30
      • 2019-08-26
      • 1970-01-01
      相关资源
      最近更新 更多