我正试图穿过我和Mockito之间的砖墙。为了获得Mockito东西的正确导入静态语句,我已经把头发弄掉了。您认为有人会抛出一张表,说 anyInt()来自 org.mockito.Matchers 和当()来自 org.mockito.Mockito 等,但这对新手来说太有帮助了,不是吗?
这种事情,特别是当与以星号结尾的无数更多的import语句混合在一起时,并不总是非常有帮助:
import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
是的,我知道并且一直在尝试使用 Eclipse Window - >首选项> Java - >编辑器 - >内容辅助 - >收藏夹机制。它有所帮助,但它并没有击中头部。
对此问题的任何答案都表示赞赏。
非常感谢, 拉斯
答案 0 :(得分:94)
以下是我为应对这种情况所做的工作。
我在新的测试类上使用全局导入。
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;
这使您可以编码而不会“卡住”试图找到要导入的正确包。
答案 1 :(得分:17)
问题是来自Hamcrest和Mockito的静态导入具有相似的名称,但分别返回Matchers和实际值。
一个解决方法是简单地复制Hamcrest和/或Mockito类并删除/重命名静态函数,以便它们更容易记住,并且更少显示在自动完成中。这就是我所做的。
此外,在使用模拟时,我会尽量避免assertThat
支持其他assertions
和verify
,例如。
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匹配器。只要你不混合匹配,你就可以用另一种方式做到这一点。
答案 2 :(得分:1)
对于is()
import static org.hamcrest.CoreMatchers.*;
对于assertThat()
import static org.junit.Assert.*;
对于when()和verify()
import static org.mockito.Mockito.*;
答案 3 :(得分:0)
我的进口
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;
它有效