At 11:55 AM 6/7/2005 -0700, Heikki Toivonen wrote:
> By the way, if you are doing assertions in code that is called by the
> reactor, this may be a bit of a problem; the reactor expects to log all
> such errors, and doesn't pass them on anywhere.  So, you would
> definitely need for all your assertions to be in your test method itself
> (i.e. *after* the waitFor/waitUntil)

Uh oh. Well that could be a problem. Unit tests typically want to do
lots of asserts all over the place.

Well, you could just do:

    result = defer.Deferred()

    def whatever(...):   # code that's called by reactor
        try:
            #
            #
            #
            # lots of test code here that includes asserts
            #
            #
            #
        except:
            result.errback()  # save any errors for later
        else:
            result.callback(return_value)  # send data back to caller


    return_value = reactor.waitUntil(result, timeout)

    # more asserts on return_value, or run more reactor-based code


When the 'waitUntil' returns, it will re-raise the assertion error sent by errback() if there was one, otherwise it will return the value sent by callback().

A Deferred is a conduit for communicating errors or return values. So, you just have to send your errors or failures over such a conduit to get them back into the test method. This is the sort of use case I had in mind for deferreds and waitUntil().


How would you see this file would need to change to run two tests with
twisted in it?

http://lxr.osafoundation.org/m2crypto/source/tests/test_ssl.py

These are high-level integration tests, not unit tests, so it's hard to say. The test reactor isn't going to help with this kind of testing. If I were trying to unit test the wrappers that it appears to be testing, I would do it without starting another process, and possibly without any socket activity involved, testing only that the wrapper makes the right calls or sends/receives the right data in response to those operations. However, if the component was not designed for testability, such tests might be difficult to create.

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

Open Source Applications Foundation "Dev" mailing list
http://lists.osafoundation.org/mailman/listinfo/dev

Reply via email to