如何模拟传出的Socket连接?

时间:2011-12-19 15:09:43

标签: java unit-testing sockets tcp mocking

在集成测试(JDK 6)中,我试图捕获所有传出的TCP连接并模拟它们。看起来我应该使用java.net.Socket#setSocketImplFactory()方法。目前工作正常,但我无法理解如何访问原始工厂,以便实例化原始JDK提供的SocketImpl类。我需要这个主要是因为我想让一些连接自由地出去,而不是嘲笑。您能就这个问题提出一些手册/指南/说明吗?

3 个答案:

答案 0 :(得分:1)

我会为Socket创建一个Socket服务,而不是模拟Socket。这可以捕获所有写入的数据并以您希望的任何方式进行回复。它可以在同一个测试中运行,也可以在同一个线程中运行。

答案 1 :(得分:0)

根据javadoc,您应该可以使用SocketFactory#getDefault()来获取您环境的默认SocketFactory。

BTW:您可能还想看看这个RFE / bug,它声明SocketImplFactory基本上是一个死胡同:http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4245730

答案 2 :(得分:0)

查看Socket类的源代码,没有原始工厂 - 构造函数检查factory是否为null,如果是,则只需将impl指定为新的PlainSocketImpl()