Не может издеваться / шпионский класс java.util.Optional - PullRequest
0 голосов
/ 31 октября 2019

Я пытаюсь реализовать этот код JUnit:

private BinlistsService binlistsService = Mockito.mock(BinlistsService.class);

@Mock
Optional<BinLists> binList = null;

@BeforeEach
    public void beforeEachTest() throws IOException {

        BinLists binLists = new BinLists();
        binLists.setId(1);
        ....

        binList = Optional.of(binLists);
    }

    @Test
    public void testBinCountryCheckFilterImpl() {

        when(binlistsService.findByName(anyString())).thenReturn(binList);

}

Но я получаю этот стек ошибок:

org.mockito.exceptions.base.MockitoException: 
Cannot mock/spy class java.util.Optional
Mockito cannot mock/spy because :
 - final class
    at org.data

Знаете ли вы, как я могу решить эту проблему?

Ответы [ 2 ]

3 голосов
/ 31 октября 2019

Удалить @Mock в поле Optional<BinLists>.

Optional - это простой класс, который может быть легко создан и контролироваться вами, поэтому вам не нужно его высмеивать. Просто создайте фактическийэкземпляр, когда он вам нужен, который вы уже делаете в beforeEachTest():

private BinlistsService binlistsService = Mockito.mock(BinlistsService.class);

Optional<BinLists> binList = null;

@BeforeEach
    public void beforeEachTest() throws IOException {

        BinLists binLists = new BinLists();
        binLists.setId(1);
        ....

        binList = Optional.of(binLists);
    }

    @Test
    public void testBinCountryCheckFilterImpl() {

        when(binlistsService.findByName(anyString())).thenReturn(binList);

}

2 голосов
/ 31 октября 2019

Вам не нужно издеваться над class Optional (базовый класс java final ), вам нужно издеваться над class BinLists

    @Mock
    BinLists binList = null;

JUnit не может насмехаться над финальным классом,но если вам нужна эта необычная техника насмешки, можете использовать PowerMock https://github.com/powermock/powermock

...