问题描述
我们最近升级到了 JUnit 4.13,我的项目被涂成黄色警告,因为 Assert.assertthat
现在已被弃用,取而代之的是 MatcherAssert.assertthat
。
批量更改我的静态导入没什么大不了的,但我希望今后我可以配置 Eclipse 以在新代码中做正确的事情。但无论我做什么,自动导入程序都会继续引入已弃用的 Assert.assertthat
而不是 MatcherAssert
。
我尝试过的一些事情:
-
将
org.hamcrest.MatcherAssert.*
添加到 首选项 -> Java -> 编辑器 -> 内容辅助 -> 收藏夹。现在,当没有导入并且我将鼠标悬停在代码上时,我将MatcherAssert.assertthat
视为快速修复建议。但这根本不影响自动导入。 -
将
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
。
最后,我有这样的东西,它在自动导入和内容辅助快速修复建议中都做正确的事情。