【问题标题】:Import for mockito模拟导入
【发布时间】:2014-09-24 20:36:20
【问题描述】:

我正在尝试像这样的声明

when(myDao.fetchTree(anyLong())).thenReturn(myTreeList);

我有进口

import static org.mockito.Mockito.when;
import static org.mockito.Matchers.anyLong;
import static org.mockito.Matchers.thenReturn; //not importing

thenReturn 的导入不是映射。这是版本问题吗?我正在使用 Mockito 1.8.4。

【问题讨论】:

    标签: java mockito


    【解决方案1】:

    Mockito 的 when 返回 OngoingStubbing 类的对象。此类有一个 thenReturn() 方法,这就是您的示例代码中调用的方法。无需额外导入。

    when(myDao.fetchTree(anyLong())).thenReturn(myTreeList);
    

    可以分解为

    OngoingStubbing thing = when(myDao.fetchTree(anyLong()));
    thing.thenReturn(myTreeList);
    

    你只是在调用 OngoingStubbing 的 thenReturn 方法。

    【讨论】:

    • 但是 STS 用红色下划线抱怨。
    • 不能直接删除导入行吗?
    • 我已经删除了。我的其他一些导入是 import static org.junit.Assert.assertEquals;导入静态 org.junit.Assert.assertNotNull;可能是它们导致冲突 import static org.mockito.Mockito.*;导入 org.junit.Before;导入 org.junit.Test;导入 org.junit.runner.RunWith;导入 org.mockito.InjectMocks;导入 org.mockito.Matchers;导入 org.mockito.Mock;导入 org.mockito.runners.MockitoJUnitRunner;
    • 尝试在最小的测试文件中重新创建它。基本上,一个具有单一测试方法的类,仅包含重现问题所需的内容,仅此而已。练习将向您展示需要修复的内容,或者您​​可以在此处发布最小文件,我们可以从中找出答案。
    【解决方案2】:

    如果你使用它应该足够了:

    import static org.mockito.Mockito.*;
    

    然后删除其余部分。

    【讨论】:

    • 通常我讨厌 * 导入,它们使重构变得困难。但是对于这样的测试和导入测试支持呢?去吧。
    【解决方案3】:

    您的问题:这是版本问题吗? 我会说不,这不是版本问题。

    如前所述,您应该

    • 在测试中使用此代码创建最小测试

      when(myDao.fetchTree(anyLong())).thenReturn(myTreeList);
      
    • 从命令行运行此代码(不在 STS 或任何 IDE 或类似的内部)

    问: 为什么要从命令行运行它并避免使用 IDE-s 等? 答: 因为有时您喜欢的 IDE 的代码解析器、检查器和验证器会报告关于代码中某些极端情况的误报。

    【讨论】:

      猜你喜欢
      • 2015-12-14
      • 2020-11-29
      • 1970-01-01
      • 2022-08-17
      • 2020-06-30
      • 2019-01-20
      • 1970-01-01
      • 1970-01-01
      • 2011-11-09
      相关资源
      最近更新 更多