java - Mockito 测试 java 8 lambda Consumer API
问题描述
我需要使用 lambda Consumer 测试一个使用另一个接口作为依赖注入的类。
@Builder
public class Interactor {
private final Gateway gateway;
void process(String message, Consumer<String> response){
gateway.process(message, uuid -> {
response.accept(uuid.toString());
});
}
}
依赖项定义如下:
public interface Gateway {
void process(String message, Consumer<UUID> uuid);
}
我将如何模拟网关,以便为我的测试提供 UUID 值响应?
这是我到目前为止所尝试的:
@Test
void whillReturnTheInjectedUUIDValueTest() {
UUID uuid = UUID.randomUUID();
Gateway gateway = Mockito.mock(Gateway.class);
Mockito.when(gateway.process("ignored", uuid1 -> {return uuid;}));
Interactor.builder().gateway(gateway).build().process("ignored", s -> {
Assertions.assertEquals(uuid.toString(), s);
});
}
我应该如何向消费者提供返回值?
解决方案
这个成功了
@Test
void willReturnTheInjectedUUIDValueTest() {
UUID uuid = UUID.randomUUID();
Gateway gateway = Mockito.mock(Gateway.class);
doAnswer(ans -> {
Consumer<UUID> callback = (Consumer<UUID>) ans.getArgument(1);
callback.accept(uuid);
return null;
}).when(gateway).process(Mockito.any(String.class), Mockito.any(Consumer.class));
Interactor.builder().gateway(gateway).build().process("ignored", s -> {
Assertions.assertEquals(uuid.toString(), s);
});
}
推荐阅读
- scala - 返回泛型类型时出错
- javascript - 在 ReactJs 中,组件和元素有什么区别?
- c# - Unity Google Play 游戏插件:错误未授权代码 13
- xcode - 不可靠的 Unix 套接字连接
- python - 如何在 Python 中使用带有故障保险的构建器模式?
- rasa-nlu - 如何使用 gunicorn 在多线程模式下运行 RASA 服务器
- python - 将打印输出写入 CSV - Numpy
- java - 如何使用 java 将表单数据插入 GoogleCloud Mysql 数据库
- javascript - javascript:函数的类型以及何时使用每个函数
- vba - 错误 1004?如果其他合理使用