我试图找到问题的答案,但找不到工作的东西。我有一个这样做的类
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?
在被测试实例上调用 logInfo()
方法:
String message = "my message";
llw.logInfo("caller", message);
并使用 Mockito#verify()
方法断言模拟是使用预期方法和您传递给测试方法的参数调用的:
Mockito.verify(lambdaLogger).log(message);
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,请将其替换为匿名内部类。