我想对这样的方法进行单元测试:
public String handleRequest(Event event) {
for(Message msg : event.getRecords()){
SDKClient client = new SDKClient(msg.getUser(), msg.getPassword());
String output = client.makeAPICall();
return output.toUpperCase();
}
}
}
通常,我们模拟像SDKClient
这样的依赖关系,将它们作为参数传入,并在Junit/Mockito中模拟它们。然而,在这种情况下,我不能只传递它,因为SDKClient
取决于传递的实际事件。还有一个不确定数量的客户端,event
中的每个消息一个。我想对整个方法进行单元测试,但我事先不知道依赖关系。有可能吗?
在这种情况下,您传入的是某种抽象new SDKClient
调用的函数:
interface SdkClientProvider {
SDKClient(String user, String password);
}
在这种特殊情况下,如果您愿意,可以使用BiFunction<String, String, SDKClient>
。
由于CCD_ 6可能是唯一的";活的";实现这个类,你甚至可以做这样的事情:
class MyService {
@Setter
private BiFunction<String, String, SDKClient> createClient = SDKClient::new;
...
}
当依赖于系统java.time.Clock
时,通常可以看到这种模式。
(请注意,"创建、使用和处置服务对象"是一个非常有问题的设计,除非你不得不使用一些设计糟糕的外部库,否则它需要重构。(