单元测试中@TestOnly和@VisibleForTesting有什么区别

What is the difference between @TestOnly and @VisibleForTesting in unit test

根据我的理解,这些注释用于带有访问修饰符的方法,该修饰符允许从另一个 class 调用方法以进行单元测试

@VisibleForTesting - com.google.common.annotations.VisibleForTesting
@TestOnly - org.jetbrains.annotations.TestOnly

第一个很大的区别显然是由不同的项目提供的。

@VisibleForTestingGoogle Guava libraries and @TestOnly is part of JetBrains annotations 的一部分,它与 JetBrains、IntelliJ IDEA 的制造商等有关。

比较两者的 JavaDoc 表明它们服务于基本相同的目标:@TestOnly and @VisibleForTesting.

请注意,两个 注释的文档都包含一条注释,有效地警告您注释本身不会阻止生产代码调用注释方法。 JetBrains 建议使用支持该注释的静态检查工具(其中一个可能内置于 IntelliJ IDEA 中),Guava 建议使用带有明确禁止 API 列表的外部检查工具。

tl;dr 它们实际上表示同一件事。使用哪一个的决定主要取决于您使用哪些工具来对它们进行操作以及它们支持哪些工具。已经在使用其中一个包中的其他注释或 类 是选择一个而不是另一个的另一个原因。