gpt4 book ai didi

java - 尝试模拟 get 类时出现 Mockito UnfinishedStubbingException

转载 作者:行者123 更新时间:2023-12-01 22:30:26 27 4
gpt4 key购买 nike

我有一个 LoggerInterceptor 类,其参数为 InspirationContext。对于这门课,我试图编写一个单元测试,但我被困在第一行:

public class LoggerInterceptor{
public method log(InvocationContext context) {
String name = invocationContext.getTarget().getClass().getName();
.....
}

我的测试如下所示:

@Test
public void logTest() throws Exception {
LoggerInterceptor objectToTest = new LoggerInterceptor();

InvocationContext context = Mockito.mock(InvocationContext.class);
Object target = Mockito.mock(Object.class);
Mockito.when(context.getTarget()).thenReturn(target);

MockGateway.MOCK_GET_CLASS_METHOD = true;

Mockito.doReturn(objectToTest.getClass()).when(target).getClass();

MockGateway.MOCK_GET_CLASS_METHOD = false;

objectToTest.log(context);
}

当我调用方法 log(context) 时,我收到 UnfinishedStubbingException。

如果我尝试:

Mockito.when(target.getClass()).thenReturn(objectToTest.getClass());

我得到这个异常:

The method thenReturn(Class<capture#3-of ? extends Object>) in the type OngoingStubbing<Class<capture#3-of ? extends Object>> is not applicable for the arguments (Class<capture#4-of ? extends LoggerInterceptor>) 

有什么办法可以通过第一行吗?我返回的字符串并不重要。

最佳答案

Object.getClass()是最终的。 Final 方法不能用 Mockito 进行模拟或 stub ,因为编译器会看到“final”,跳过虚拟方法分派(dispatch),因此 Mockito 既不能拦截对该方法的调用,也不能识别 doReturn 中的方法, 何时,或验证。当您稍后与 Mockito 交互时,它会检测到您开始 stub ,但无法检测到您已完成,因此它会抛出 UnfinishedStubbingException。

如果您想让target调整它显示的类型,您需要更改传递到Mockito.mock的类对象,或添加withSettings().extraInterfaces(...).

关于java - 尝试模拟 get 类时出现 Mockito UnfinishedStubbingException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27904786/

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