如何在Groovy中设置final字段



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

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

我想测试一个方法是否使用这个记录器,最好使用mock。问题是这个字段是最终字段,所以我不能直接设置它。我知道有一些变通方法,比如:

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

但这些都是糟糕的技巧。有没有更时髦的方法可以做到这一点?

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

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

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

最新更新