如何在twisted中编写协议的高级测试?你知道吗
我知道您可以使用StringTransport来测试低级协议的详细信息,例如,它接收到一些原始数据并发生了一些状态更改,或者它以某种方式响应:
factory = SomeFactory()
protocol = factory.buildProtocol("ignored")
trans = proto_helpers.StringTransport("foo", 1234)
protocol.makeConnection(trans)
# ...
protocol.dataReceived("RAW PROTOCOL DATA\n")
self.assertEquals("Hello World!\n", self.transport.value())
然而,wire协议现在并不那么重要。它在不断变化,我用放大器不必想太多。我现在要测试的是高级行为:
等等。例如:
serverApp = FakeApplication() # this contains application state
serverFactory = SomeFactory(serverApp)
testEndpoint = magic.TestEndpoint() # this class doesn't exist
testEndpoint.listen(factory)
clientApp = FakeApplication()
clientFactory = SomeFactory(clientApp)
testEndpoint.otherSide.connect(clientFactory)
self.assertEquals(serverApp.nConnections, 1)
self.assertEquals(clientApp.nConnections, 1)
assert clientApp.onNewConnection.was_called() # pseudo-code
缺少的是某种假端点或双向传输来连接两个协议对象。你知道吗
如何在twisted中测试协议行为(而不是有线协议编码)有什么提示吗?你知道吗
正如您所说,您并不是要测试线路上字节的低级细节。你不需要一个能让你移动那些不相关字节的测试工具。你知道吗
相反,您需要一个测试工具,它可以让您远离字节,测试对更高级别非常重要的应用程序级行为。你知道吗
你提到你在用放大器。Twisted中的ampapi通过向您提供可以传递到协议的
callRemote
API的命令对象来工作。你知道吗如果单击GUI中的“foo”按钮会导致“bar”命令以某些特定参数遍历网络,那么将GUI代码连接到只处理命令的
AMP
类命令。这种双精度测试的callRemote
实现可能类似(未测试):现在您可以调用应用程序级行为而不用担心协议。你知道吗
在一个完美的世界中,像这样的类将与Twisted一起分发,作为使用AMP的开发人员的测试库的一部分。也许在你建立它之后,你可以把它贡献给上游。你知道吗
相关问题 更多 >
编程相关推荐