[Dev] Mock Reactor for tests?
Phillip J. Eby
pje at telecommunity.com
Mon Jun 6 16:25:55 PDT 2005
At 02:33 PM 6/6/2005 -0700, Brian Kirsch wrote:
>Phillip and Heikki you bring up some good points. In regards to the
>timeout issue any client and any server code used in testing should
>leverage the Twisted TimeoutMixin. This will force a timeout after a
>certain number of seconds specified. Phillip, you are correct that
>there is no concept of a simulated duration. But it is easy to lower the
>actual duration value. For example, in test_pop3client to
>lower the timeout value from 60 to 5 to force a shorter duration all I
>have to do is popClientInstance.timeout = 5.
I understand that. However, a single unit test that takes 5 whole
*seconds* to run is useless (as a unit test for development purposes). You
should be able to run an entire subsystem worth of unit tests in 5
seconds. PEAK's roughly 900 unit tests run in 7 seconds on my PC, and that
includes a variety of "simulated time" scheduling tests that if run for
real, would take minutes. 5 seconds is totally off the scale for a unit test.
So, while I'll agree that you certainly can do what you're saying, I'm just
pointing out that it's not going to improve on the availability of
TDD-quality unit tests in Chandler unless you can take the timeouts down to
zero, which still doesn't work for timing tests.
> I guess my point was we may not need to add the extra burden of
> maintaining our own mock reator. I think it is still worth looking in to
> just leveraging the code twisted provides.
Sure. But I doubt it'd be much burden - keep in mind that I've written
these things before, with several variations, and fairly tight levels of
integration with Twisted 1.0, as well as implementing from-scratch reactors
for specialized purposes. I seem to recall my first simulated-time reactor
was only a dozen or so lines of added code.
Anyway, if you feel that StringTransport is sufficient to do loopback I/O,
then the only other features that we would need are simulated time and the
ability to reset between tests. Which means it would be well worth
proposing an ITestReactor interface to Twisted, with methods like those
proposed by Itamar in the thread I mentioned earlier. (Given that he
proposed them, I imagine a patch would be welcome.)
I'll probably take a closer look at this tomorrow, to see what it would
take to integrate my old simulated-time approach into a patch for Twisted 2.
More information about the Dev
mailing list