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

时间:2011-09-06 15:54:48

标签: java mockito static-import

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

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

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

是的,我知道并且一直在尝试使用 Eclipse Window - >首选项> Java - >编辑器 - >内容辅助 - >收藏夹机制。它有所帮助,但它并没有击中头部。

对此问题的任何答案都表示赞赏。

非常感谢, 拉斯

4 个答案:

答案 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支持其他assertionsverify,例如。

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;

它有效