我想在特定的时间间隔内记录某些方法的进度(避免日志溢出)。我做了这个:记录每个循环迭代和线程睡眠是不好的做法?
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