【发布时间】:2019-01-22 12:12:08
【问题描述】:
我正在尝试测试 lambda 表达式中的一些代码,这是另一个类的回调。
class EmailSender {
private EmailBuilder emailBuilder;
public void send() {
String testEmail = emailBuilder.buildEmail("Test Email", bodyContentAppender());
//send testEmail
}
private Consumer<Email> bodyContentAppender() {
//how to test this through JUnit?
return email -> email.appendBody("Body Content");
}
}
interface EmailBuilder {
String buildEmail(String templateName, Consumer<Email> contentAppender);
}
getBodyContent 方法中的 lambda 表达式从 EmailBuilder 调用,这是 EmailSender 的 JUnit 测试中的模拟依赖项。因为我在嘲笑EmailBuilder 的行为,所以getBodyContent 中的代码不会从测试中调用。如何测试这样的一块?
编辑:
在这种情况下,通过 Argument Captors 捕获 lambda 表达式不是解决方案,因为 EmailBuilder 的行为被模拟并且不调用实际方法。其次,email.appendBody 对通过外部 API 传递的对象进行一些转换,并且创建起来并不简单。
【问题讨论】:
-
直接调用
getBodyContent(),测试body是否正确附加 -
能否提供模拟“EmailBuilder”的代码?
-
@Hulk:我知道了,伙计 :) 遗憾的是,这份文件是大多数人的论点,我没有找到任何不同的论点。
-
@Hulk 离题讨论提醒!
标签: java unit-testing lambda junit java-8