【发布时间】:2011-02-18 03:53:47
【问题描述】:
在过去的几年里,我一直认为在 Java 中,反射在单元测试中被广泛使用。由于必须检查的一些变量/方法是私有的,因此有必要读取它们的值。我一直认为Reflection API也用于这个目的。
上周我不得不测试一些包,因此编写了一些 JUnit 测试。与往常一样,我使用反射来访问私有字段和方法。但是我检查代码的主管对此并不满意,并告诉我反射 API 不适合用于这种“黑客攻击”。相反,他建议修改生产代码中的可见性。
使用反射真的很糟糕吗?我真的不敢相信-
编辑:我应该提到我被要求所有测试都在一个名为 test 的单独包中(因此使用受保护的可见性例如也不是可能的解决方案)
【问题讨论】:
-
您使用反射、设置、获取或两者都练习哪种访问方式?
-
@fish:我只使用 get 来验证是否设置了某些特定值
-
Java 中的正常做法是将测试放在同一个包中,以便您可以测试“包私有”(默认访问)类。
-
对上一条评论的一个补充(关于将测试放在同一个包中)是您将测试放在一个单独的源代码树中,它没有与应用程序一起部署。
-
为这些变量添加 getter 应该没什么大不了的,特别是如果你可以说服你的主管接受不同源代码树但在同一个包中的测试(这已经是常见的做法提及)。恕我直言,直接访问字段总是一个坏主意,无论是使用反射还是仅仅具有松散的可见性。
标签: java unit-testing reflection