我想在特定的時間間隔內記錄某些方法的進度(避免日誌溢出)。我做了這個:記錄每個循環迭代和線程睡眠是不好的做法?
while (!x.isFinished()) {
LOG.info("some progress: {}", x.getStatus());
Thread.sleep(5000);
}
至於聲納告訴它是不好的做法是使用Thread.sleep(n)
,並將它標誌爲關鍵的,我在尋找更好的,正確的方式來做到這一點。有什麼我可以改進的嗎?
的消息是:
在測試中使用了Thread.sleep只是一般一個壞主意。它創建了 脆性測試,根據環境 (「在我的機器上通過!」)或加載,可能無法預料地失敗。不要依賴於時機
編輯: 這不是重複的,它不是一個考驗。我想在工作週期中記錄每個x間隔的時間。
編輯2(根據@Wolf S答案進行說明): 感謝您的回覆。它在多個地方使用,我想知道每次是哪個地方。這是示例代碼。更重要的是,它給了我一些知識,它需要在生命中完成多少時間並幫助診斷。
我只是想知道是否有一些嚴格的方法來做到這一點,或只是忽略聲納。
sonarqube具體說什麼? – Michael
[如何在單元測試中避免Thread.sleep?]可能的重複(https://stackoverflow.com/questions/36283334/how-to-avoid-thread-sleep-in-unit-tests) – user7294900
所以你真正的問題應該是「爲什麼Sonarqube認爲這是一個測試,當它不是?」 – Michael