Mockito.verify не работает с Lombok @Delegate - PullRequest
0 голосов
/ 30 января 2020

Поэтому я испытываю следующее поведение при попытке проверить вызовы на ложном (то же самое для шпиона), который использует Lombok @Delegate внутри:

public class SomeClass {

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

Test:

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

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

Похоже Mockito не понимает, что метод "put" происходит из базового делегированного класса. Есть идеи как заставить это работать?

Ответы [ 2 ]

2 голосов
/ 30 января 2020

Вы уверены, что инициализируете макет, с помощью 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());
   }
}
1 голос
/ 30 января 2020

С этим не было проблем, я использовал 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))

...