不能mock/spyclassjava.util.Optional

Cannot mock/spy class java.util.Optional

我正在尝试实现这个 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

你知道我该如何解决这个问题吗?

删除 Optional<BinLists> 字段中的 @Mock

Optional 是一个简单的 class,您可以轻松创建和控制它,因此您无需模拟它。只需在需要时创建一个您已经创建的实际实例它在 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);

}

class Optional(java core class final)不需要mock,class BinLists需要mock

    @Mock
    BinLists binList = null;

JUnit 无法模拟最终的 class,但如果您需要这种不寻常的模拟技术,可以使用 PowerMock https://github.com/powermock/powermock