On Feb 15, 2010, at 3:50 PM, Michael Foord wrote: > On 15/02/2010 20:27, Glyph Lefkowitz wrote: >> >> >> On Feb 13, 2010, at 12:46 PM, Guido van Rossum wrote: >> >>> On Fri, Feb 12, 2010 at 8:01 PM, Glyph Lefkowitz >>> <gl...@twistedmatrix.com> wrote: >>>> I find setUpClass more hostile to *other* kinds of testing, because this >>>> convenience for simple integration tests makes more involved, >>>> performance-intensive integration tests harder to write and manage. >>> >>> That sounds odd, as if the presence of this convenience would prohibit >>> you from also implement other features. >> >> And I am pretty sure this is not just my over-reaction; Michael still >> appears to be wrestling with the problems I'm describing. > And I appreciate your input.
Thanks :). >> In a recent message he was talking about either breaking compatibility with >> TestSuite implementations that override run(), or test-reordering - both of >> which I consider important, core features of the unittest module. > > Well, by "breaking compatibility with custom TestSuite implementations that > override run" I mean that is one possible place to put the functionality. > Code that does override it will *not* stop working, it just won't support the > new features. Ah, I see. This doesn't sound *too* bad, but I'd personally prefer it if the distinction were a bit more clearly drawn. I'd like frameworks to be able to implement extension functionality without having to first stub out functionality. In other words, if I want a test suite without setUpClass, I'd prefer to avoid having an abstraction inversion. Practically speaking this could be implemented by having a very spare, basic TestSuite base class and ClassSuite/ModuleSuite subclasses which implement the setUpXXX functionality. > If we chose this implementation strategy there would be no compatibility > issues for existing tests / frameworks that don't use the new features. That's very good to hear. > If tests do want to use the new features then the framework authors will need > to ensure they are compatible with them. This seems like a reasonable > trade-off to me. We can ensure that it is easy to write custom TestSuite > objects that work with earlier versions of unittest but are also compatible > with setUpClass in 2.7 (and document the recipe - although I expect it will > just mean that TestSuite.run should call a single method if it exists). This is something that I hope Jonathan Lange or Robert Collins will chime in to comment on: expanding the protocol between suite and test is an area which is fraught with peril, but it seems like it's something that test framework authors always want to do. (Personally, *I* really want to do it because I want to be able to run things asynchronously, so the semantics of 'run()' need to change pretty dramatically to support that...) It might be good to eventually develop a general mechanism for this, rather than building up an ad-hoc list of test-feature compatibility recipes which involve a list of if hasattr(...): foo(); checks in every suite implementation. > Perhaps a better idea might be to also add startTest and stopTest methods to > TestSuite so that frameworks can build in features like timing tests (etc) > without having to override run itself. This is already possible in the > TestResult of course, which is a more common extensibility point in *my* > experience. I think timing and monitoring tests can mostly be done in the TestResult class; those were bad examples. There's stuff like synthesizing arguments for test methods, or deciding to repeat a potentially flaky test method before reporting a failure, which are not possible to do from the result. I'm not sure that startTest and stopTest hooks help with those features, the ones which really need suites; it would seem it mostly gives you a hook to do stuff that could already be done in TestResult anyway.
_______________________________________________ Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com