我正试图穿过我和Mockito之间的砖墙。我已经撕裂了我的头发,试图得到正确的导入静态语句的Mockito的东西。您可能会认为有人会抛出一个表,说anyInt()来自org.mockit。匹配器和当()来自org.mockit。Mockito等,但这对新手来说太有帮助了,不是吗?
这类事情,特别是当与无数以星号结尾的import语句混合在一起时,并不总是很有用:
import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
是的,我知道并且一直在尝试使用Eclipse Window -> Preferences-> Java -> Editor-> Content Assist -> Favorites机制。这句话有帮助,但并不是一针见血。
请回答这个问题。
很多谢谢,Russ
我是这么做的。
我在一个新的测试类上使用全局导入。
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;
问题是来自Hamcrest和Mockito的静态导入具有相似的名称,但分别返回Matchers和实际值。
一种解决方法是简单地复制Hamcrest和/或Mockito类,并删除/重命名静态函数,这样它们更容易记住,更少出现在自动完成中。我就是这么做的。
另外,在使用mock时,我尽量避免使用assertThat
,而使用其他assertions
和verify
,例如
assertEquals(1, 1);
verify(someMock).someMethod(eq(1));
不是assertThat(1, equalTo(1));
verify(someMock).someMethod(eq(1));
如果您在Eclipse中从您的Favorites中删除类,并键入长名称,例如org.hamcrest.Matchers.equalTo
并按CTRL+SHIFT+M"添加导入",那么自动完成将只显示Hamcrest匹配器,而不是任何Mockito匹配器。你也可以用另一种方式来做只要你不混合匹配器
For is()
import static org.hamcrest.CoreMatchers.*;
为为了()import static org.junit.Assert.*;
For when() and verify()
import static org.mockito.Mockito.*;
我的导入
import static org.junit.Assert.assertEquals;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import org.junit.Test;
可以
import static org.mockito.Matchers.anyInt;
。当(listMock.get (anyInt ())) .thenReturn("stackoverflow";