无法模拟/间谍类 java.util.Optional

Pet*_*zov 0 java junit mockito junit5

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

}
Run Code Online (Sandbox Code Playgroud)

但我得到这个错误堆栈:

org.mockito.exceptions.base.MockitoException: 
Cannot mock/spy class java.util.Optional
Mockito cannot mock/spy because :
 - final class
    at org.data
Run Code Online (Sandbox Code Playgroud)

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

Ken*_*han 6

@MockOptional<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);

}

Run Code Online (Sandbox Code Playgroud)