1

我决定回到我和春天启动器,我已经在这里提到的整合卡夫卡度量的想法:卡夫卡MetricsReporter由Spring启动器支持

https://github.com/spring-projects/spring-boot/issues/6227

截至目前我有一个单独的带有工作代码的“sandbox”项目,我想将它合并到Spring Boot中。现在我有点困惑。我的测试部分需要powermock嘲笑卡夫卡的“超安全”类:

package org.apache.kafka.common.metrics; 

// some imports... 

public final class KafkaMetric implements Metric { 
    private MetricName metricName; 
    private final Object lock; 
    private final Time time; 
    private final Measurable measurable; 
    private MetricConfig config; 

    KafkaMetric(Object lock, MetricName metricName, Measurable measurable, MetricConfig config, Time time) { 
     this.metricName = metricName; 
     this.lock = lock; 
     this.measurable = measurable; 
     this.config = config; 
     this.time = time; 
    } 

    // some good code here, but no public constructor and the class is final... of course. 

} 

但powermock没有在春季启动时使用。

我该怎么办?

  1. 添加最新的稳定powermock - 无论是在spring-boot-dependencies和spring-boot-actuator。
  2. 添加最新的稳定powermock只弹簧启动执行器 - 让它成为一个隐藏的秘密帮手。
  3. 排除需要powermock的测试。
  4. 忘记Kafka指标,它们非常可怕,没有人希望它们在我们友好的,友好的弹簧启动器中使用。

PS:我也一直在努力,让世界变得更美好,并在卡夫卡自己解决这个问题,但不幸的维护者一直不理我:

+1

如何使用'Metrics.addMetric()'创建'KafkaMetric'实例,并通过'KafkaStatisticsProvider.metricChange()'做出反应,您将在测试前注册到Metrics实例中?当然,不是Powermock。不熟悉Kafka度量标准,但我分叉你的项目。看起来很简单,但需要一些时间来弄清楚发生了什么。如果周末没有找到时间,会从星期一回来给你。 –

+0

这回答了问题,案件已结案,谢谢。期待收到你的来信 – stepio

回答

1

在评论中提供您的确认,我只是在这里复制我的评论作为正确结束问题的有效答案。

你可以尝试使用Metrics.addMetric()创建KafkaMetric实例,不是通过你的KafkaStatisticsProvider.metricChange(),您将在Metrics实例测试之前注册的反应吧。当然,不是Powermock。

我会尽量找到下周的时间来为您的执行器项目贡献一部分以避免Powermock。

+0

我已经完成了这个变化:https://github.com/stepio/spring-boot/commit/83f853f780b58c805c8c1cdc8ed1a394a5c04f9a – stepio

+0

这很酷!我应该以某种方式在启动问题 –

+0

中提到您的意思是我应该在Spring Boot项目中为度量支持创建一些问题?截至目前,我不认为代码已经准备好了。我想发明一些东西,将本报告人与Spring Kafka的自动配置联系起来,自动编写指标并完成更改。 – stepio