如何配置 Eclipse 自动静态导入以更喜欢 MatcherAssert.assertThat 而不是 Assert.assertThat?

问题描述

我们最近升级到了 JUnit 4.13,我的项目被涂成黄色警告,因为 Assert.assertthat 现在已被弃用,取而代之的是 MatcherAssert.assertthat

批量更改我的静态导入没什么大不了的,但我希望今后我可以配置 Eclipse 以在新代码中做正确的事情。但无论我做什么,自动导入程序都会继续引入已弃用的 Assert.assertthat 而不是 MatcherAssert

我尝试过的一些事情:

  • org.hamcrest.MatcherAssert.* 添加首选项 -> Java -> 编辑器 -> 内容辅助 -> 收藏夹。现在,当没有导入并且我将鼠标悬停在代码上时,我将 MatcherAssert.assertthat 视为快速修复建议。但这根本不影响自动导入。

    enter image description here

  • org.junit.Assert.assertthat 添加首选项 -> Java -> 外观 -> 类型过滤器。 (我也试过 org.junit.Assert.* 甚至 org.junit.*)这似乎对静态导入没有影响。当我尝试使用 org.junit.* 时,我可以看到该设置对常规导入生效,但对静态导入没有任何效果

因此,无论我做什么,当我在没有明确拉入 MatcherAssert.assertthat 的情况下点击保存时,自动导入都会拉取 Assert.assertthat

你知道有什么办法可以解决这个问题吗?

解决方法

我的一位同事进行了一些超级调查,发现从 Eclipse 2020-09 开始,内容辅助收藏夹现在会影响自动静态导入:

Bug 283287 - [organize imports] Could use favorites for static imports

并且由于收藏夹配置允许您指定特定的班级成员,因此我能够通过添加 org.hamcrest.MatcherAssert.* 然后将我之前的 org.junit.Assert.* 更改为包含所有公共成员的更具体的集合来解决这个问题该类的成员,除了 assertThat

最后,我有这样的东西,它在自动导入和内容辅助快速修复建议中都做正确的事情。

enter image description here

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...