81

我正试图冲破我和 Mockito 之间的砖墙。试图为 Mockito 东西获取正确的导入静态语句时,我已经把头发扯掉了。你会认为有人会扔一张桌子说anyInt()来自org.mockito.Matcherswhen()来自org.mockito.Mockito等等,但这对新手来说太有帮助了,不是吗?

这种事情,尤其是与无数以星号结尾的导入语句混合在一起时,并不总是很有帮助:

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

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

对此问题的任何答案将不胜感激。

非常感谢,拉斯

4

4 回答 4

108

以下是我为应对这种情况而一直在做的事情。

我在一个新的测试类上使用全局导入。

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;

这使您可以编写代码而不会“卡住”试图找到要导入的正确包。

于 2011-09-13T20:07:12.903 回答
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 匹配器。只要您不混合匹配器,您就可以通过其他方式执行此操作。

于 2011-09-06T17:01:39.860 回答
4

对于是()

import static org.hamcrest.CoreMatchers.*;

对于 assertThat()

import static org.junit.Assert.*;

对于 when() 和 verify()

import static org.mockito.Mockito.*;
于 2015-07-23T07:44:27.413 回答
1

我的进口

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;

它有效

于 2021-03-14T12:29:32.647 回答