简体   繁体   English

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

[英]Mocking a method which takes String as a parameter Mockito

I am trying to mock a method which takes String as a parameter, Based on the string value i wanted to return different values, below is my Sample code 我正在尝试模拟一个将String作为参数的方法,基于我想返回不同值的字符串值,以下是我的示例代码

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

The resolveVariable metjos takes an object and a string, Object might be anything but the second argument must match, The above one did not worked. resolveVariable metjos需要一个对象和一个字符串,Object可以是任何东西,但第二个参数必须匹配,以上一个没有用。

EDIT: 编辑:

Signature for resolveVariable metod is 解决方案的签名是

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

Please help me on this. 请帮我。

Based on your description, I would implement it as Mockito.Answer : 根据您的描述,我将其实现为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;
    }
});

I'm guessing here but perhaps 我在这里猜,但也许

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

will do the trick. 会成功的

Note that the resolveVariable() method is moved outside the when() argument list, which should always be just a @Mock . 请注意, resolveVariable()方法移至when()参数列表之外,该列表应始终只是@Mock

Cheers, 干杯,

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM