因此,我试图模拟采用单个参数的方法getPremium,即PanicLevelenum实例。它需要根据传入的PanicLevel返回不同的double值。

如果我想按枚举值执行此操作,则应使用thi之类的方法。

Mockito.when(mockData.getPremium(PanicLevel.NORMAL)).thenReturn(1.1);


但这需要每个枚举值一行。我宁愿做这样的事情:

Mockito.when(mockData.getPremium(anyPanicLevel())).thenReturn(premiums.get(passedInPanicLevel());


显然这是无效的...但是类似的事情应该是...

我发现了这个,但是它在某处使用了anyString方法:
mockito return value based on property of a parameter

如何使Mockito做到这一点,而不必对每个键重复执行when

最佳答案

您可以使用Answer

Mockito.when(mockData.getPremium(Matchers.any(PanicLevel.class)))
    .thenAnswer(new Answer<Double>() {
        @Override
        public Double answer(InvocationOnMock arg0) throws Throwable {
          PanelLevel panicLevel = (PanicLevel) arg0.getArguments()[0];
          return premiums.get(panicLevel);
        }
    });


仅供参考:anyString()可能只是Matchers.anyString()

09-09 18:31