mockito 测试使用特定字符串调用的方法

eni9jsuy  于 2022-11-08  发布在  其他
关注(0)|答案(2)|浏览(168)

我试图找到我的问题的答案,但无法找到工作的东西。我有一个类,这样做

public class LambdaLoggerWrapper {

    public LambdaLoggerWrapper(LambdaLogger lambdaLogger){
        this.lambdaLogger = lambdaLogger;
    }

    public void logInfo(String caller, String message){
        lambdaLogger.log(message);
    }
}

我的测试是

@RunWith(MockitoJUnitRunner.class)
public class LambdaLoggerWrapperTest{
    @Mock LambdaLogger mockLambdaLogger;

    @Test
    public void testLog(){
         LambdaLoggerWrapper llw = new LambdaLoggerWrapper(mockLambdaLogger);
         //how to test that calling llw.logInfo actually calls lambdaLogger.log with appropriate string?
    }
}

我将如何测试调用llw.logInfo是否实际上使用适当的字符串调用了lambdaLogger.log?

jdgnovmf

jdgnovmf1#

在受测试的示例上调用logInfo()方法:

String message = "my message";
llw.logInfo("caller", message);

然后使用Mockito#verify()方法Assertmock是用预期的方法和传递给测试方法的参数调用的:

Mockito.verify(lambdaLogger).log(message);
c7rzv4ha

c7rzv4ha2#

final ArgumentCaptor<String> argumentCaptor = ArgumentCaptor.forClass(String.class);
doAnswer(invocationOnMock -> {

     assertEquals("yourexpectedValue", argumentCaptor.getValue());
     return ;// return an instance of whatever type LambdaLogger::log method returns

}).when(mockLambdaLogger).log(argumentCaptor.capture());

llw.logInfo("caller", "yourexpectedValue");

如果您没有使用Java8,请将其替换为匿名内部类。

相关问题