如何让Mockito根据枚举返回不同的值?

Tim*_*m B 2 java mockito

所以我试图模拟一个getPremium采用单个参数的方法,PanicLevel其中一个实例是一个enum.它需要根据PanicLevel传入的内容返回不同的double值.

如果我想按枚举值执行此操作,那么像thi这样的东西应该可行.

Mockito.when(mockData.getPremium(PanicLevel.NORMAL)).thenReturn(1.1);
Run Code Online (Sandbox Code Playgroud)

但是每个枚举值需要一行.我宁愿做类似的事情:

Mockito.when(mockData.getPremium(anyPanicLevel())).thenReturn(premiums.get(passedInPanicLevel());
Run Code Online (Sandbox Code Playgroud)

显然这是无效的...但类似的东西应该......

我找到了这个,但它使用了anyString某个方法: mockito返回值基于参数的属性

如何在不重复when每个键的情况下让Mockito执行此操作?

And*_*ner 5

你可以使用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);
        }        
    });
Run Code Online (Sandbox Code Playgroud)

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