Java Netty EmbeddedChannel模拟两个不同的连接

Java Netty EmbeddedChannel模拟两个不同的连接,java,netty,nio,Java,Netty,Nio,我正在使用Netty's来测试我的一些处理程序 我有一个用例,我想测试我的处理程序是否根据两个连接(通道)的不同来区分它们 不幸的是,对于创建的每个通道,都会使用提供硬编码值的。因此,两个不同的实例具有完全相同的特性 我曾尝试监视EmbeddedChannel并模拟remoteAddress方法,但由于EmbeddedChannel实现,这不适用,因为在模拟发生之前创建了。因此,模拟值不会在管道上传递,因为它具有对非模拟对象的引用 在如何实现上述目标方面,是否有其他选择。理想情况下,我希望两个不

我正在使用Netty's来测试我的一些处理程序

我有一个用例,我想测试我的处理程序是否根据两个连接(通道)的不同来区分它们

不幸的是,对于创建的每个通道,都会使用提供硬编码值的。因此,两个不同的实例具有完全相同的特性

我曾尝试监视EmbeddedChannel并模拟remoteAddress方法,但由于EmbeddedChannel实现,这不适用,因为在模拟发生之前创建了。因此,模拟值不会在管道上传递,因为它具有对非模拟对象的引用

在如何实现上述目标方面,是否有其他选择。理想情况下,我希望两个不同的实例具有不同的


谢谢。

也许您可以尝试使用频道的id


当然,这将导致您的行为与基于远程地址的当前代码不同。但是,在某些情况下,仅基于远程地址可能是不够的(例如,如果真正的远程地址位于代理之后)。那么你也可以在“正常”的情况下考虑ID了吗?< /P> < P>你可以尝试创建一个扩展了<代码>嵌入通道< />的自定义频道,然后重写<代码>保护SOCKAdtoReloDeAdSersS0()/<代码>以返回你想要的地址。 像这样的事情应该可以

public class CustomEmbeddedChannel extends EmbeddedChannel{

    private InetSocketAddress socketAddress;

    public CustomEmbeddedChannel(String host, int port, final ChannelHandler ... handlers){
        super(handlers);
        socketAddress = new InetSocketAddress(host, port);
    }

    @Override
    protected SocketAddress remoteAddress0(){
        return this.socketAddress;
    }
}