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)
这允许您编写代码而不会"卡住"试图找到要导入的正确包.
Gar*_*all 16
问题是来自Hamcrest和Mockito的静态导入具有相似的名称,但分别返回Matchers和实际值.
一种解决方法是简单地复制Hamcrest和/或Mockito类并删除/重命名静态函数,以便它们更容易记忆,并且更少显示在自动完成中.这就是我做的.
此外,使用嘲笑的时候,我会尽量避免assertThat
在有利于其他其他assertions
和verify
,如
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.equalTo
CTRL + SHIFT + M进行"添加导入",则自动完成只会向您显示Hamcrest匹配器,而不是任何Mockito匹配器.只要你不混合匹配,你就可以用另一种方式做到这一点.
对于 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)