Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 测试twisted协议_Python_Unit Testing_Testing_Twisted - Fatal编程技术网

Python 测试twisted协议

Python 测试twisted协议,python,unit-testing,testing,twisted,Python,Unit Testing,Testing,Twisted,我使用Twisted开发了一个非常基本的客户机和服务器协议。Twisted允许独立地测试它们,并为此提供了良好的测试UTIL,如StringTransport 但是,假设我想测试协议是否正常工作。例如,我想测试当服务器收到某条消息时,它将以某种特定的方式回复客户机。在Twisted中使用试用版和UTIL的最佳方法是什么?我目前正在启动进程来运行它们,但随后我失去了对它们的对象的访问权限,我需要将它们的状态转储到一个文件中以验证正确的行为。我认为这不是一个干净的方法。最好使用模拟从客户端到服务器的

我使用
Twisted
开发了一个非常基本的客户机和服务器协议。Twisted允许独立地测试它们,并为此提供了良好的测试UTIL,如
StringTransport


但是,假设我想测试协议是否正常工作。例如,我想测试当服务器收到某条消息时,它将以某种特定的方式回复客户机。在Twisted中使用
试用版和UTIL的最佳方法是什么?我目前正在启动进程来运行它们,但随后我失去了对它们的对象的访问权限,我需要将它们的状态转储到一个文件中以验证正确的行为。我认为这不是一个干净的方法。最好使用模拟从客户端到服务器的TCP连接的
StringTransport
。twisted开发人员通常是如何测试这一点的?

我想您已经回答了自己的问题:
最好使用一个StringTransport来模拟从客户端到服务器的TCP连接
。单元测试文档中应该有足够的信息供您开始使用。避免使用子进程和线程,因为这无疑会让你自己发疯(我知道我是这样做的)@sa臭名昭著:谢谢你的评论。是的,我正试着这么做。当一端发送数据时,我刷新
StringTransport
,并手动将内容馈送到另一端的
dataReceived
。这对客户端和服务器之间更复杂的交互有明显的限制。我的问题是是否有一种标准的方法来解决这个问题…
当一端发送数据时,我刷新StringTransport,并手动将内容馈送到另一端接收的数据中
几乎是“标准”的方法。您再次回答了自己的问题:)。您基本上是在模拟传入和传出数据(大部分情况下),因此只需检查
StringTransport
并将数据泵入
datareceived
即可实现这一点。如果你有一个更复杂的情况,那么请解释一下。例如,假设我有一个从客户端到服务器的长消息序列,反过来说,我只想测试序列运行后的最终状态是否正确。我不能将所有消息都传递给
dataReceived
,因为消息太多了。我想使用类似于
task.LoopingCall
的方法定期刷新和馈送
dataReceived
,但似乎并不正确。如果有新数据时,
StringTransport
to标记中至少有一个事件,并且可以回调一个函数,将其传递给
dataReceived
。。。。