1

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

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

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

我知道首选的方法是使用异步模型而不是 await() 调用,但是对于我的场景,我需要它是同步的,并且我需要确保它在某个时候完成。

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

提前谢谢了!毫米

4

2 回答 2

1

根据您的代码编写方式,您可以使用模拟框架,例如 mockito。如果这不可能,您还可以使用“已连接”的 UDP 套接字,即绑定到本地地址的数据报套接字。如果你发送到一个伪造的服务器,你应该得到 PortunreachableException 或类似的东西。

于 2012-05-05T12:29:55.670 回答
0

Netty 有一个类 FailedFuture 可用于此目的,

例如,您可以使用模拟以下内容的测试来模拟您的课程:

ChannelFuture future;
if(ALWAYS_FAIL) {
    future = channel.newFailedFuture(new Exception("I failed"));
else
    future = channel.write(request, remoteInetSocketAddress);
于 2016-01-07T14:04:33.073 回答