【问题标题】:Disable duplicate class error for classes in test folder - Android Studio/ IntelliJ禁用测试文件夹中类的重复类错误 - Android Studio/IntelliJ
【发布时间】:2016-07-25 10:18:18
【问题描述】:

我需要能够关闭“重复类”错误和视觉指示器(红色波浪下划线),当您有两个在同一个包中但在不同文件夹中命名相同的类时会出现这种情况。在这种情况下,'main' 和 'test'。

背景

可以说这是this发帖的重复,但是,我认为一些背景是为了避免一些明显的回复(而且,该帖子没有令人满意的答案)。

这个问题与单元测试和协作者模拟有关。众所周知,Android 违反了 Java 开发的基本“包含优于继承”准则。这就是为什么你需要 Robolectric 来测试生命周期覆盖而不会使框架崩溃你的测试。您的协作者无法以正常方式被模拟和注入,因为被测试的类协作者。

在这种情况下,我的大型企业客户通过添加必须使用的 Activity 和 Fragment 的几层类扩展,进一步违反了“包含而不是继承”准则。我不能修改这些层并且试图模拟内部是不切实际的。最简单的解决方案是创建这个额外层的叶类的副本,为被测类提供单元测试友好的结果。

这行得通。当您运行单元测试时,测试副本被解析,当您运行生产代码时,生产副本被解析。

这只是需要抑制的持续烦人的错误指示。

变通办法、IntelliJ 插件、自定义类加载器等 - 都会考虑(附说明)。

【问题讨论】:

  • Studio (2.2) 的最新更新不再报告此错误。
  • AS 2.3.3 确实为我报告了它,但至少仅针对 /test/ 变体。同样,一切都按预期对我有用(使用重复变体的 JUnit 测试,使用正确的 /main/ 的生产)。顺便说一句,当在测试下运行时,我确实只需要一个布尔值设置为 true/false 以用于调试构建类型(例如在调试中使用一小部分发布变体,发布/调试代码由 if (BuildConfig.DEBUG) 以任何方式完成)。尝试了几种不同的方法,但没有一种优雅和简单的方法,每种方法都感觉像是一种 hack。这个“重复错误”最终看起来是最好的之一。

标签: java android unit-testing intellij-idea


【解决方案1】:

它是硬编码的:source

唯一的方法是更改​​源并构建您自己的 IntelliJ - 但您将无法使用 Ultimate 版本。

making an agent to replace the method - HighlightClassUtil.checkDuplicateTopLevelClass

这可能会派上用场,因此您可以将其作为普通插件使用:How can I add a Javaagent to a JVM without stopping the JVM?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-05
    • 2016-12-17
    • 2020-12-14
    • 2013-11-26
    • 2017-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多