我正在使用Netty编写一个将UDP消息发送到服务器的客户端应用程序。简而言之,我正在使用这段代码将流写入通道:
ChannelFuture future = channel.write(request, remoteInetSocketAddress);
future.awaitUninterruptibly(timeout);
if(!future.isDone()){
//abort logic
}
一切正常,但有一点:我无法测试中止逻辑,因为我无法使写入失败 - 即使服务器已关闭,未来也将成功完成。写操作通常需要大约1 ms,因此设置非常小的超时并没有太大帮助。
我知道优先使用异步模型而不是await()调用,但是对于我的场景,我需要它是同步的,我需要确保它在某些时候得到完善。
有谁知道我怎么能模拟未完成的未来?
非常感谢提前! MM
答案 0 :(得分:1)
根据代码的编写方式,您可以使用模拟框架,例如mockito。如果无法做到这一点,您还可以使用“已连接”的UDP套接字,即绑定到本地地址的数据报套接字。如果您发送到虚假服务器,您应该获得PortunreachableException或类似的东西。
答案 1 :(得分:0)
Netty有一个FailedFuture类,可以用于此目的,
您可以使用模拟以下内容的测试来模拟您的类:
ChannelFuture future;
if(ALWAYS_FAIL) {
future = channel.newFailedFuture(new Exception("I failed"));
else
future = channel.write(request, remoteInetSocketAddress);