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


77

我正试图冲破我和Mockito之间的砖墙。我为试图为Mockito的东西获取正确的导入静态语句付出了很多精力。您可能会认为有人会抛出一个表,说anyInt()来自org.mockito.Matcherswhen()来自org.mockito.Mockito等,但这对新手来说太有用了,不是吗?

这类事情,尤其是与无数以星号结尾的更多import语句混合使用时,并不总是很有帮助:

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

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

这个问题的任何答案将不胜感激。

非常感谢,拉斯


很抱歉让周围的社区感到困惑:我的原始帖子也提出了另一个问题,但是由于缺少括号,我发现我的代码有问题,因此我删除了这一点。
Russ Bateman

您在寻找备忘单吗?我们大概可以鞭打一个吗?API有什么不足?mockito.googlecode.com/svn/branches/1.6/javadoc/index.html?org/…–
Tony R

2
因此,您必须了解到,我会虔诚地避免在导入语句中使用星号,因为在代码顶部看到此类信息仅意味着无望知道符号的来源,因此无法确定要包含的JAR在我的项目中。在浏览器中搜索Javadoc不太适合查找符号。是的,备忘单确实很棒,但是作为一个同事,我刚才正在讨论,这是您认为Java社区现在可以解决的问题之一。谢谢,请告诉我您是否愿意。
Russ Bateman

导入静态org.mockito.Mockito。*; 帮助我成功地编译了代码。
赵刚

Answers:


16

问题在于,从Hamcrest和Mockito进行的静态导入具有相似的名称,但分别返回Matchers和实值。

一种解决方法是简单地复制Hamcrest和/或Mockito类并删除/重命名静态函数,以使它们更容易记住,并且在自动完成中较少出现。那就是我所做的。

另外,在使用模拟时,我尽量避免assertThat偏爱其他otherassertionsverify,例如

assertEquals(1, 1);
verify(someMock).someMethod(eq(1));

代替

assertThat(1, equalTo(1));
verify(someMock).someMethod(eq(1));

如果您从Eclipse中的“收藏夹”中删除类,并键入长名称(例如)org.hamcrest.Matchers.equalTo,然后对“ Add Import”添加CTRL + SHIFT + M,则自动完成功能只会显示Hamcrest匹配器,而不会显示任何Mockito匹配器。只要您不混合匹配器,就可以用另一种方式进行。


1
是的,您已经把我的抱怨当作新手了:我不确定接口来自何处(JUnit,模拟框架,Hamcrest等)。我花了更多的时间试图从JAR组合项目应该必须(比我以前从库和头文件中找到C接口的方法要多)。
Russ Bateman

您可能会更雄辩地说明为什么要避免使用assert断言:我还没有对此进行认真的思考,但是我现在正尝试着用模拟编写测试,并且验证这件事对我来说是新的。谢谢。
Russ Bateman

好的,我为您提供另一种解决方案。希望有帮助!
Garrett Hall

103

这是我为应对这种情况所做的工作。

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

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
对于Mac用户,而不是CTRL + SHIFT + O,而是执行command + shift + O
Michael Osofsky 2014年

永久使用import static org.junit.Assert.*;测试类中的东西(最终不要用ctrl+ shift+代替它们)有什么弊端O
mkasberg '18年

2
由于我总是会回覆您对这3行的回覆。也许您可以更新import static org.mockito.Matchers.*;到, import static org.mockito.ArgumentMatchers.*; 因为Matchers它已被标记为已弃用
timguy,

1
@timguy谢谢-我来看一下!很难相信已经有9年了……
Tony R

3

对于is()

import static org.hamcrest.CoreMatchers.*;

对于assertThat()

import static org.junit.Assert.*;

对于when()和verify()

import static org.mockito.Mockito.*;
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.