【发布时间】:2019-10-26 07:18:34
【问题描述】:
我有一个目前仅用于内部构建和文档目的的注释。它在运行时没有提供任何价值,这就是我选择@Retention(SOURCE)的原因:
@Retention(SOURCE)
public @interface X
但是,为了验证它的正确使用,我想实现一个单元测试来导航整个 API,以检查注释是否应用到了它应该应用到的任何地方。使用普通的 Java 反射 API 可以很容易地实现该单元测试,但我不能这样做,因为测试不能反映注解,因为它的 @Retention(SOURCE)。
为了在测试中使用反射,我必须将其更改为@Retention(RUNTIME),由于运行时字节码的开销,我想避免这种情况。
我知道的解决方法:
一如既往地有解决方法。我知道这些:
- 我们可以使用使构建失败的注释处理器,而不是运行单元测试。这是可行的,但不是最优的,因为使用注释处理器而不是使用 junit API 和更更方便的反射 API 的单元测试,测试非常复杂并且更难实现。我只想将此解决方法用作最后的手段。
- 我们可以将源代码中的
@Retention更改为RUNTIME,使用这些附加测试构建源代码,然后预处理 API 以再次删除保留,然后再次构建 API 以供生产使用。这是一个烦人的解决方法,因为它会使构建复杂化并减慢构建速度。
问题:
有没有更方便的方法在运行时保留注解仅用于测试,而不是在实际构建的 jar 文件中,使用 Maven?
【问题讨论】:
标签: java unit-testing annotations annotation-processing