【问题标题】:Why is there difference between @Mock and Mockito.mock(UriInfo.class)? [closed]为什么@Mock 和 Mockito.mock(UriInfo.class) 之间有区别? [关闭]
【发布时间】:2017-11-21 19:55:49
【问题描述】:

Mockito.mock 和 @Mock 应该是 do the same thing。奇怪的是,在嘲笑UriInfo 时似乎并非如此。在我使用 JUnit4 的单元测试中,以下代码有效:

private UriInfo uriInfo = Mockito.mock(UriInfo.class);

而在运行测试时出现“未设置参数 uriInfo”的错误:

@Mock
private UriInfo uriInfo;

【问题讨论】:

  • 如果你使用 @Mock ,你需要使用 MockitoAnnotations.initMocks(this) 初始化 mocks 你有这个吗?
  • 如果你使用的是 Mockito 模拟注解,你需要调用MockitoAnnotations.initMocks(this); 这通常在一个标有@Before 注解的方法中完成。
  • 来自您的链接Note that to enable Mockito annotations during test executions, the MockitoAnnotations.initMocks(this) static method has to be called.
  • 太疯狂了!我确实有那个@RunWith 声明。

标签: java junit mockito junit4 java-ee-6


【解决方案1】:

你做过模拟初始化吗?

@Before
public void before() {
    MockitoAnnotations.initMocks(this);
}

或者你可以在你的测试类中使用一个特殊的运行器:

@RunWith(MockitoJUnitRunner.class)

你在哪里使用你模拟的urlInfo?您是否为它的方法指定了一个模拟实现?例如,

when(urlInfo.getPath()).thenReturn("some/path");
when(urlInfo.toString()).thenReturn("some/path"); 

【讨论】:

  • 是的,我确实使用 @RunWith(MockitoJUnitRunner.class) 让 mockito 运行测试。
  • uriInfo 作为对象传递,不调用任何方法。被测试的类做extends 另一个类。但我的问题是为什么@Mock 与其替代方案不同。似乎@Mock 返回了 null,而 Mockito.mock() 返回了一个非 null 值。
  • 你确定它不一样吗?初始化后你能在调试器中看到null吗?
  • 我确定 null,因为在失败跟踪中,我可以看到 uriInfo 为空时抛出的异常的唯一消息(在我的类扩展的父类中)。
  • @TreefishZhang 也许不是urlInfo 本身为空。核实。可能使用了其中一种方法 - 默认情况下,模拟的 all 方法返回 null
猜你喜欢
  • 2017-10-27
  • 2014-06-27
  • 2010-09-18
  • 2014-10-02
  • 2013-12-11
  • 2014-02-13
  • 2023-04-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多