2011-12-19 27 views
10

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

+0

此问题是相关的:http://stackoverflow.com/questions/2083647/writing-a-java-net-socketimplfactory – yegor256 2011-12-19 15:47:29

+0

也相关:http://stackoverflow.com/questions/2257901/mock-runtime-getruntime – Rich 2011-12-20 08:02:36

回答

0

纵观Socket类的源代码,也没有原厂 - 中构造函数检查factory是否为空,如果是,则只需将impl分配为新的PlainSocketImpl()

+0

据我了解,没有“Socket类的源代码”这样的东西。每个JDK都有自己的源代码,这可能因实现而异。 – yegor256 2011-12-19 15:37:45

+0

也许这对我来说太天真了,但我认为你使用的是Oracle JDK 6,在这种情况下有特定的资源可以查看 - 我这样做并用它来解释没有原始工厂可以获得()。如果你能做到这一点,我同意@Peter Lawrey认为使用服务是最好的方法。我必须使用Runtime.getRuntime()完成相同的操作。 http://stackoverflow.com/questions/2257901 – Rich 2011-12-20 08:01:36

+0

这是我的应用程序内的第三方库,即使用套接字。无论如何我无法改变它。 – yegor256 2011-12-20 08:03:44

1

而不是嘲笑一个套接字我会创建一个套接字服务的Socket来交谈。这可以捕获所有写入数据并以您希望的任何方式进行回复。它可以在相同的测试中运行,并且可能在同一个线程中运行。