gpt4 book ai didi

java - 为什么将 Mockito 从 1.9.5 升级到 1.10.8 会破坏这个 Captor?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:22:27 24 4
gpt4 key购买 nike

给定这个目标代码:

...
sessionWrapper.execute(arenaCreateCql, arenaGuid, arenaName, displayName, authorName, createdOn);
...

以及用于验证该行的 Mockito 代码:

...
@Captor
private ArgumentCaptor<Date> createdOnCaptor;
...
@Test
public void testThat_Execute_CreatesNewArena() throws Exception {
...
inOrder.verify(mockSessionWrapper).execute(
eq(arenaCreateCql), eq(testArenaGuid), eq(testArenaName), eq(testArenaDisplayName), eq(testAuthorName), createdOnCaptor.capture());
...
assertNotNull(createdOnCaptor.getValue());
}

这适用于 Mockito 1.9.5。升级 1.10.8 时,验证通过,但 getValue() 失败并出现此错误:

org.mockito.exceptions.base.MockitoException: 
No argument value was captured!
You might have forgotten to use argument.capture() in verify()...
...or you used capture() in stubbing but stubbed method was not called.
Be aware that it is recommended to use capture() only with verify()

编辑添加 MCVE。以下代码在 Mockito 1.9.5 上运行绿色,在 Mockito 1.10.8 上运行红色。

MockitoExample.java:

package org.makeyourcase.example;

import java.util.Date;

public class MockitoExample {

private MockitoExampleExecutor executor;

public void execute(){
executor.execute("var1", new Date());
}
}

MockitoExampleExecutor.java:

package org.makeyourcase.example;

public class MockitoExampleExecutor {

public void execute(Object... bindVariables){
}
}

MockitoExample_UT:

package org.makeyourcase.example;

import java.util.Date;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Captor;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;

import static org.junit.Assert.assertNotNull;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.verify;

@RunWith(MockitoJUnitRunner.class)
public class MockitoExample_UT {

@Mock
private MockitoExampleExecutor mockitoExampleExecutor;
@Captor
private ArgumentCaptor<Date> dateCaptor;
@InjectMocks
private MockitoExample subject;

@Test
public void testThat_Execute_InvokesCalendar() throws Exception {
subject.execute();
verify(mockitoExampleExecutor).execute(eq("var1"), dateCaptor.capture());
assertNotNull(dateCaptor.getValue());
}
}

创建 MCVE 后发现了另一条信息 - 如果日期是为 bindVariables 传递的唯一元素,则测试工作正常。也就是说,从目标和测试代码中删除“var1”,然后测试在 1.9.5 和 1.10.8 下运行正常。另外,俘虏是为了约会也没关系。如果参数是其他类型,例如 Integer,也会出现同样的问题。

最佳答案

谢谢,这可能是一个错误,我已经在 GH-188 上创建了报告.

但不确定何时修复。GH-211 中修复.

关于java - 为什么将 Mockito 从 1.9.5 升级到 1.10.8 会破坏这个 Captor?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27303562/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com