【问题标题】:Mockito.verify doesn't work with Lombok @DelegateMockito.verify 不适用于 Lombok @Delegate
【发布时间】:2020-05-16 11:44:23
【问题描述】:

因此,当我尝试验证在内部使用 Lombok @Delegate 的模拟调用(对于间谍也是如此)时,我遇到了以下行为:

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”方法来自底层委托类。 任何想法如何使它工作?

【问题讨论】:

    标签: java testing junit mockito lombok


    【解决方案1】:

    您确定要通过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());
       }
    }
    

    【讨论】:

    • 是的,我确实使用 initMocks() 进行了初始化,而且 - 认为 when() 可以与 Delegate 一起工作。我会尝试再次检查我错过了什么
    【解决方案2】:

    这没有问题,我使用 verify() 错误。

    我用过

    verify(someClassMock, times(0)).put(any(), any(), any());
    

    而不是

    verify(someClassMock, times(0)).put(any(), any(), anyLong());
    

    (我实际的 SomeClass 不使用 Map,而是使用了一些暴露 void 的类 put(K key, V value, long ttl))

    【讨论】:

      猜你喜欢
      • 2018-07-22
      • 1970-01-01
      • 1970-01-01
      • 2019-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-24
      • 2016-05-26
      相关资源
      最近更新 更多