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

标签 java annotations guava encapsulation jetbrains-ide

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

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

最佳答案

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

@VisibleForTestingGoogle Guava libraries 的一部分并且 @TestOnlyJetBrains annotations 的一部分其中与 IntelliJ IDEA 的制造商 JetBrains 等相关联。

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

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

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

关于java - 单元测试中@TestOnly和@VisibleForTesting有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67207970/

相关文章:

java - 如何使用 jets3t 访问 S3?

java - 读时删除(添加每条语句删除)最后批量删除好还是单个删除好?

java - 是否可以在 Java 中创建对象树?

java - 如何解决java.lang.NoClassDefFoundError : javax/annotation/Generated?

java - 使用 curl 将数据发布到本地主机的 HTTP Post 方法失败

iphone - 仅在叠加层内显示注释

django - 注释在 Django/Tastypie 中被忽略

java - Guava 事件总线 : What does it mean to listen to event supertypes (such as EventObject or Object)?

scala - 如何创建 com.google.common.collect.HashBiMap

java - 使用 Guava 对集合进行缓存过滤器