Hi! Your replies are very encouraging. Thank you!
> I'm curious, since we rarely get to see the positive impact of > documentation, and only hear about it when it didn't exist - did you > discover this testing style from > http://twistedmatrix.com/documents/current/core/howto/trial.html#auto5 ? > :) > > Yes, I started from that document. It describes well how to call certain parts of Twisted to check some behavior and this stimulated me to discover Twisted API. I think I have finally discovered a good way for writing tests that use PB. I used `test.test_pb.IOPump` `test.test_pb.connectedServerAndClient` as a basis for my tests. -------- from twisted.spread import pb from twisted.trial import unittest from twisted.test import proto_helpers class Document(pb.Root): def remote_convert(self): return 'I was called' class IOPump: def __init__(self, client, server, clientIO, serverIO): self.client = client self.server = server self.clientIO = clientIO self.serverIO = serverIO def pump(self): cData = self.clientIO.value() sData = self.serverIO.value() self.clientIO.clear() self.serverIO.clear() self.server.dataReceived(cData) self.client.dataReceived(sData) def connect(root): serverFactory = pb.PBServerFactory(root()) serverBroker = serverFactory.buildProtocol(()) clientFactory = pb.PBClientFactory() clientBroker = clientFactory.buildProtocol(()) clientTransport = proto_helpers.StringTransport() serverTransport = proto_helpers.StringTransport() clientBroker.makeConnection(clientTransport) serverBroker.makeConnection(serverTransport) pump = IOPump(clientBroker, serverBroker, clientTransport, serverTransport) # initial communication pump.pump() return clientFactory, serverFactory, pump class DocTestCase(unittest.TestCase): def test_convert(self): def cb0(doc): d = doc.callRemote('convert') return d def cb1(res): self.assertEqual('I was called', res) return res client, server, pump = connect(Document) d = client.getRootObject() d.addCallback(cb0) d.addCallback(cb1) pump.pump() pump.pump() return d -------- The only caveat here is that if I forget to call pump.pump() sufficient number of times, then the callback with an assertion may not be executed and this can lead to false positives -- with regards, Maxim
_______________________________________________ Twisted-Python mailing list Twisted-Python@twistedmatrix.com http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python