如何在Groovy中设置final字段

我有一个java类,我在groovy / spock中测试。 java类有一个final字段:

private static final log = Logger.getLogger(...) 

我想测试方法是否使用此记录器,最好使用模拟。 问题是这个领域是最终的,所以我不能只设置它。 我知道有一些解决方法,如:

modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL);

但这些都是糟糕的黑客。 是否有一种更加时髦的方式来做到这一点?

您可以通过配置记录器而不是模拟它来尝试测试日志记录。

也许,配置您的记录器以将输出直接输出到文件。 然后编写一个自定义Groovy布尔函数,检查可以从spock测试中调用的文件内容。

Java日志记录配置非常灵活,因此如果需要,您可能会想出一些可以避免使用临时文件的内容。