查找 Mockito 构造的导入静态语句

新手上路,请多包涵

我正试图冲破我和 Mockito 之间的砖墙。我已经因为试图为 Mockito 的东西获得正确的 导入静态 语句而焦头烂额。您可能会认为有人会直接扔出一张表说 anyInt() 来自 org.mockito.Matcherswhen() 来自 org.mockito.Mockito 等等,但这对新手来说太有帮助了,不是吗?

这种事情,尤其是与无数以星号结尾的导入语句混合使用时,并不总是很有帮助:

 import static org.junit.Assert.*;
import static org.mockito.Mockito.*;

是的,我知道并一直在尝试使用 Eclipse Window -> Preferences-> Java -> Editor-> Content Assist -> Favorites 机制。它有帮助,但并没有一针见血。

对此问题的任何答案将不胜感激。

非常感谢,拉斯

原文由 Russ Bateman 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 684
2 个回答

问题是来自 Hamcrest 和 Mockito 的静态导入具有相似的名称,但分别返回 Matchers 和实际值。

一种解决方法是简单地复制 Hamcrest 和/或 Mockito 类并删除/重命名静态函数,以便它们更容易记住并且更少出现在自动完成中。我就是这么做的。

此外,在使用模拟时,我尽量避免 assertThat 支持其他 other assertionsverify ,例如

assertEquals(1, 1);
verify(someMock).someMethod(eq(1));

代替

assertThat(1, equalTo(1));
verify(someMock).someMethod(eq(1));

如果您从 Eclipse 中的收藏夹中删除类,并输入长名称,例如 org.hamcrest.Matchers.equalTo 并执行 CTRL+SHIFT+M 以“添加导入”,那么自动完成将只显示 Hamcrest 匹配器,而不是任何 Mockito 匹配器.只要你不混合匹配器,你也可以用另一种方式来做到这一点。

原文由 Garrett Hall 发布,翻译遵循 CC BY-SA 3.0 许可协议

这是我一直在做的事情来应对这种情况。

我在一个新的测试类上使用全局导入。

 import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
import static org.mockito.Matchers.*;

当您完成编写测试并需要提交时,您只需按 CTRL+SHIFT+O 来组织包。例如,您可能只剩下:

 import static org.mockito.Mockito.doThrow;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import static org.mockito.Matchers.anyString;

这使您可以编写代码而不会“卡住”试图找到要导入的正确包。

原文由 Tony R 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题