模拟一个将String作为参数Mockito的方法

时间:2014-06-24 11:18:19

标签: java mockito

我正在尝试模拟一个将String作为参数的方法,根据我想要返回不同值的字符串值,下面是我的示例代码

when(mockVariableResolver.resolveVariable(
    (FacesContext)anyObject(),      
     Mockito.eq(ProgramConstants.SRCH_PROC_DATA_BEAN))).
thenReturn(searchProcedureCodeDataBean);

resolveVariable metjos接受一个对象和一个字符串,Object可能是任何东西,但第二个参数必须匹配,上面的一个没有用。

修改

resolveVariable metod的签名是

fc.getApplication().getVariableResolver().resolveVariable(fc,
                                        "#{" + ProgramConstants.SRCH_PROC_DATA_BEAN + "}")

请帮我解决这个问题。

2 个答案:

答案 0 :(得分:3)

根据您的说明,我会将其实施为Mockito.Answer

when(mock.resolveVariable(anyObject(), anyString())).thenAnswer(new Answer<String>() {
    @Override
    public String answer(InvocationOnMock invocation) throws Throwable {
        Object[] args = invocation.getArguments();
        String secondArgument = (String) args[1];
        //
        // TODO: make return value depend from secondArgument
        return null;
    }
});

答案 1 :(得分:0)

我猜这里,但也许

when( mockVariableResolver )
    .resolveVariable( (FacesContext)anyObject(),      
                      Mockito.eq( ProgramConstants.SRCH_PROC_DATA_BEAN ) ) )
    .thenReturn( searchProcedureCodeDataBean );

会做到这一点。

请注意,resolveVariable()方法移出when()参数列表,该列表应始终为be just a @Mock

干杯,