【问题标题】:What is the difference between @TestOnly and @VisibleForTesting in unit test单元测试中@TestOnly 和@VisibleForTesting 有什么区别
【发布时间】:2021-04-22 06:36:31
【问题描述】:
据我了解,这些注释用于具有访问修饰符的方法,该修饰符允许从另一个类调用方法以进行单元测试
@VisibleForTesting - com.google.common.annotations.VisibleForTesting
@TestOnly - org.jetbrains.annotations.TestOnly
【问题讨论】:
标签:
java
annotations
guava
encapsulation
jetbrains-ide
【解决方案1】:
第一个很大的区别显然是它是由不同的项目提供的。
@VisibleForTesting 是 Google Guava libraries 的一部分,@TestOnly 是 JetBrains annotations 的一部分,它们与 IntelliJ IDEA 的制造商 JetBrains 等相关联。
比较两者的 JavaDoc 表明它们的目标基本相同:@TestOnly 和 @VisibleForTesting。
请注意,both 注释的文档包含有效警告您注释本身不会阻止生产代码调用带注释的方法的注释。 JetBrains 建议使用支持该注释的静态检查工具(其中一个可能内置在 IntelliJ IDEA 中),而 Guava 建议使用带有明确禁止 API 列表的外部检查器工具。
tl;dr 它们实际上表示同一件事。使用哪一个的决定主要取决于您使用哪些工具对它们进行操作以及它们支持哪一个。已经在使用其中一个包中的其他注释或类是选择另一个包的另一个原因。