R. David Murray wrote:
On Thu, 11 Feb 2010 12:41:37 +0000, Michael Foord <fuzzy...@voidspace.org.uk> 
wrote:
On 11/02/2010 12:30, Nick Coghlan wrote:
The test framework might promise to do the following for each test:

   with get_module_cm(test_instance): # However identified
     with get_class_cm(test_instance): # However identified
       with test_instance: # **
         test_instance.test_method()
Well that is *effectively* how they would work (the semantics) but I
don't see how that would fit with the design of unittest to make them
work *specifically* like that - especially not if we are to remain
compatible with existing unittest extensions.

If you can come up with a concrete proposal of how to do this then I'm
happy to listen. I'm not saying it is impossible, but it isn't
immediately obvious. I don't see any advantage of just using context
managers for the sake of it and definitely not at the cost of backwards
incompatibility.

I suspect that Nick is saying that it is worth doing for the sake of it,
as being more "Pythonic" in some sense.

That is, it seems to me that in a modern Python writing something like:


@contextlib.contextmanager
def foo_cm(testcase):
    testcase.bar = some_costly_setup_function()
    yield
    testcase.bar.close()

@contextlib.contextmanager
def foo_test_cm(testcase):
    testcase.baz = Mock(testcase.bar)
    yield


@unittest.case_context(foo_cm)
@unittest.test_context(foo_test_cm)
class TestFoo(unittest.TestCase):

    def test_bar:
        foo = Foo(self.baz, testing=True)
        self.assertTrue("Context managers are cool")

This reminds me of the decorators I have available in testfixtures:

http://packages.python.org/testfixtures/mocking.html
http://packages.python.org/testfixtures/logging.html
http://packages.python.org/testfixtures/files.html

(the last of which is a lot prettier in svn, not had a chance to release :-S)

Anyway, these I've ended up making available as context managers as well as decorators...

But yes, something similar for sharing state between tests and/or doing setup for each test would be nice :-)

cheers,

Chris

--
Simplistix - Content Management, Batch Processing & Python Consulting
            - http://www.simplistix.co.uk

_______________________________________________
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

Reply via email to