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

2022-08-31 12:16:28

我试图撞穿我和Mockito之间的砖墙。我已经因为试图为Mockito的东西获得正确的导入静态语句而绞尽脑汁。你可能会认为有人会抛出一张桌子,说anyInt()来自org.mockito.Matchers而当()来自org.mockito.Mockito等,但这对新手来说太有帮助了,不是吗?

这种事情,特别是当与无数以星号结尾的导入语句混合在一起时,并不总是很有帮助:

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

是的,我知道并一直在尝试使用Eclipse Window-> Preferences->Java-> Editor-> Content Assist-> Favorites机制。它有帮助,但它不会击中头上的钉子。

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

非常感谢,拉斯


答案 1

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

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

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;

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


答案 2

问题在于,从 Hamcrest 和 Mockito 导入的静态名称相似,但分别返回 Matchers 和 real 值。

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

此外,在使用模拟时,我尽量避免偏袒其他和,例如assertThatassertionsverify

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

而不是

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

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


推荐