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