gpt4 book ai didi

java - Mockito.verify 不适用于 Lombok @Delegate

转载 作者:行者123 更新时间:2023-12-01 19:30:07 24 4
gpt4 key购买 nike

因此,当我尝试验证内部使用 Lombok @Delegate 的模拟调用(与 spy 相同)时,我会遇到以下行为:

public class SomeClass {

@Delegate
private final Map<String, String> map;
...
}

测试:

@Mock //same for @Spy ..
private SomeClass someClassMock;

@Test
void someTest() {
...
verify(someClassMock, times(0)).put(anyString(), anyString()); // <-- NullPointerException
}

看起来 Mockito 不明白“put”方法来自底层委托(delegate)类。有什么想法如何让它发挥作用吗?

最佳答案

您确定正在初始化模拟吗,通过 initMocks()MockitoJUnitRunner (或者 MockitoExtension 如果您使用的是 JUnit5

下面的代码完美运行,

import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import static org.mockito.internal.verification.VerificationModeFactory.times;

import java.util.Map;

import lombok.experimental.Delegate;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;

@ExtendWith(MockitoExtension.class)
public class DelTest {

class TestMap<K, V> {

@Delegate
Map<K, V> map;
}

@Mock//same for @Spy ..
private TestMap<String, String> someClassMock;

@Test
void someTest() {
when(someClassMock.put(anyString(),anyString())).thenReturn("x");
someClassMock.put("a","b");
verify(someClassMock, times(1)).put(anyString(), anyString());
}
}

关于java - Mockito.verify 不适用于 Lombok @Delegate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59993148/

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