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