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

时间:2019-10-30 21:16:25

标签: 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);

}

但是我得到了这个错误堆栈:

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

您知道如何解决此问题吗?

2 个答案:

答案 0 :(得分:3)

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

Optional是一个简单的类,可以很容易地由您创建和控制,因此您无需对其进行模拟。只需在需要时创建一个实际的实例即可,而该实例已经在{{1}中完成了}:

beforeEachTest()

答案 1 :(得分:2)

mle2不需要模拟(java核心类 final ),tpcfun<- function(t, tm.f, topt.f, pmax.f) { perfmu = pi+(pmax.f-pi)*(1+((topt.f-t)/(topt.f-tm)))*(((t-ti)/(topt.f-ti))^((tm.f-ti)/(topt.f-tm.f))) perfmu[perfmu<0] = 0.00001 return(perfmu) } m2<- mle2(performance ~ dnorm(mean=-sum(log(tpcfun(t=ac.temp, tm.f, topt.f, pmax.f))), sd=1), method='L-BFGS-B', lower=c(tm.f=1, topt.f=1, pmax.f=1), control=list(maxit=5000, parscale=c(tm.f=1e1, topt.f=1e1, pmax.f=1e2)), start=list(tm.f=15, topt.f=20, pmax.f=150), data=perfdat) summary(m2) 不需要模拟

class Optional

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