python中的套接字模块包装了_socket
模块,这是C实现的东西。同样,socket.socket将采用必须实现_sock
接口的_socket
参数。在某些方面,_sock
必须是来自_socket
的底层套接字类型的实际实例,因为C代码进行类型检查(与纯python不同)。
鉴于您可以为_sock
传入类似套接字的对象,看起来您可以编写一个可以传递给socket.socket的套接字模拟器。它需要在内存中模拟底层套接字行为,而不是在真实网络或任何东西上。它不应与_socket
区别开来。
构建此类仿真需要什么?
我知道,我知道,这不是非常实用。事实上,我学到了很难使用常规套接字更容易,并且不需要假套接字。我以为我可以更好地控制带有假套接字的测试环境。无论我“浪费”的时间,我发现在这个过程中我学到了很多关于套接字和python的知识。
我猜测任何解决方案都必须是这样的交互对象的堆栈:
something_that_uses_sockets (like XMLRPCTransport for ServerProxy)
|
V
socket.socket
|
V
FakeSocket
|
V
FakeNetwork
|
V
FakeSocket ("remote")
|
V
socket.socket
|
V
something_else_that_uses_sockets (like SimpleXMLRPCServer)
看起来这基本上是真正的套接字,除了真正的网络而不是假网络(加上OS级套接字),而_socket
代替FakeSocket。
无论如何,只是为了好玩,有关如何处理这个问题的想法吗?
很明显,使用FakeSocket,您可以在Google Apps中执行类似套接字的操作......
答案 0 :(得分:3)
已经完成了。 Twisted广泛用于其协议实现的单元测试。一个好的起点将是some of Twisted's unit tests。
实际上,您只需使用未连接到真实套接字的传输在协议上调用makeConnection。超级简单!