如何模拟未完成的Netty ChannelFuture

时间:2012-05-05 10:01:57

标签: udp netty

我正在使用Netty编写一个将UDP消息发送到服务器的客户端应用程序。简而言之,我正在使用这段代码将流写入通道:

ChannelFuture future = channel.write(request, remoteInetSocketAddress);
future.awaitUninterruptibly(timeout);
if(!future.isDone()){
   //abort logic
}

一切正常,但有一点:我无法测试中止逻辑,因为我无法使写入失败 - 即使服务器已关闭,未来也将成功完成。写操作通常需要大约1 ms,因此设置非常小的超时并没有太大帮助。

我知道优先使用异步模型而不是await()调用,但是对于我的场景,我需要它是同步的,我需要确保它在某些时候得到完善。

有谁知道我怎么能模拟未完成的未来?

非常感谢提前! MM

2 个答案:

答案 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);