【问题标题】:Finding import static statements for Mockito constructs查找 Mockito 构造的导入静态语句
【发布时间】:2011-11-11 11:16:43
【问题描述】:

我正试图冲破我和 Mockito 之间的砖墙。试图为 Mockito 东西获取正确的 import static 语句时,我已经把头发扯掉了。你会认为有人会扔一张桌子说 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 机制。它有帮助,但不会一针见血。

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

非常感谢, 拉斯

【问题讨论】:

  • 抱歉打扰了社区:我原来的帖子还问了另一个问题,但我发现我的代码有问题,由于缺少括号,所以我删除了那个。
  • 您在寻找备忘单吗?我们可能可以鞭打一个? api有什么不足? mockito.googlecode.com/svn/branches/1.6/javadoc/index.html?org/…
  • 所以,你必须明白我虔诚地避免在 import 语句中使用星号,因为在代码顶部看到那种东西只是意味着知道符号来自哪里是没有希望的,因此,不找出在我的项目中包含什么 JAR 的方法。在浏览器中搜索 Javadoc 对查找符号不太好。是的,备忘单会非常好,但作为我和我刚才讨论的同事,这是你认为 Java 社区现在已经解决的问题之一。谢谢 - 如果你这样做,请告诉我。
  • 导入静态 org.mockito.Mockito.*;帮助我成功编译了我的代码。

标签: java mockito static-import


【解决方案1】:

问题是来自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 匹配器。只要您不混合匹配器,您就可以通过其他方式执行此操作。

【讨论】:

  • 是的,你解决了我作为新手的一个抱怨:​​我不确定接口来自哪里(JUnit、模拟框架、Hamcrest 等)我花了更多时间尝试拼凑将 JAR 中的项目放在一起比我真正应该做的(比我以前从库和头文件中定位 C 接口时所做的)。
  • 您可能会更加雄辩地解释为什么要避免使用 assertThat:我还没有认真考虑过,但我现在正试图用模拟来编写测试,而验证是新的对我来说。谢谢。
  • 好的,我有另一个解决方案给你。希望有帮助!
【解决方案2】:

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

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

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;

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

【讨论】:

  • 对于 Mac 用户,使用 CTRL+SHIFT+O 代替 command + shift + O
  • 在你的测试类中永久使用import static org.junit.Assert.*;之类的东西有什么缺点(最后不替换为ctrl+shift+O)?
  • 因为我总是回复您对这 3 行的回复。也许您可以将import static org.mockito.Matchers.*; 更新为import static org.mockito.ArgumentMatchers.*;,因为Matchers 被标记为已弃用
  • @timguy 谢谢 - 我会看看!很难相信已经 9 年了......
【解决方案3】:

对于is()

import static org.hamcrest.CoreMatchers.*;

对于 assertThat()

import static org.junit.Assert.*;

对于when()和verify()

import static org.mockito.Mockito.*;

【讨论】:

    【解决方案4】:

    我的进口

    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;
    

    它有效

    【讨论】:

      猜你喜欢
      • 2018-10-18
      • 1970-01-01
      • 2012-11-02
      • 1970-01-01
      • 2021-11-10
      • 2013-06-05
      • 1970-01-01
      • 1970-01-01
      • 2022-06-16
      相关资源
      最近更新 更多