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

Rus*_*man 70 java static-import mockito

我试图穿过我和Mockito之间的砖墙.为了获得Mockito东西的正确导入静态语句,我已经把头发撕掉了.你认为有人会抛出一张桌子,说anyInt()来自org.mockito.Matchers,when()来自org.mockito.Mockito等,但这对新手来说太有帮助了,不是吗?

这种事情,特别是当与无数更多以星号结尾的import语句混合在一起时,并不总是非常有用:

import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
Run Code Online (Sandbox Code Playgroud)

是的,我知道并且一直在尝试使用Eclipse Window - > Preferences-> Java - > Editor-> Content Assist - > Favorites机制.它有所帮助,但它并没有击中头部.

任何对这个问题的答案都将不胜感激.

非常感谢,Russ

Ton*_*y R 97

以下是我为应对这种情况所做的工作.

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

import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
import static org.mockito.Matchers.*;
Run Code Online (Sandbox Code Playgroud)

当您完成编写测试并需要提交时,只需按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;
Run Code Online (Sandbox Code Playgroud)

这允许您编写代码而不会"卡住"试图找到要导入的正确包.

  • 因为我总是回复你对这三行的回复。也许您可以将 `import static org.mockito.Matchers.*;` 更新为 `import static org.mockito.ArgumentMatchers.*;` 因为 `Matchers` 被标记为已弃用 (2认同)

Gar*_*all 16

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

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

此外,使用嘲笑的时候,我会尽量避免assertThat在有利于其他其他assertionsverify,如

assertEquals(1, 1);
verify(someMock).someMethod(eq(1));
Run Code Online (Sandbox Code Playgroud)

代替

assertThat(1, equalTo(1));
verify(someMock).someMethod(eq(1));
Run Code Online (Sandbox Code Playgroud)

如果从Eclipse中的收藏夹中删除类,并输入长名称,例如按org.hamcrest.Matchers.equalToCTRL + SHIFT + M进行"添加导入",则自动完成只会向您显示Hamcrest匹配器,而不是任何Mockito匹配器.只要你不混合匹配,你就可以用另一种方式做到这一点.


eth*_*lan 5

对于 is()

import static org.hamcrest.CoreMatchers.*;
Run Code Online (Sandbox Code Playgroud)

对于assertThat()

import static org.junit.Assert.*;
Run Code Online (Sandbox Code Playgroud)

对于when()和verify()

import static org.mockito.Mockito.*;
Run Code Online (Sandbox Code Playgroud)