Johnny Lee wrote:
> Here is the source:
> 
(snip)
> class TestCaseTest(TestCase):
>       def testRunning(self):
>               print "testRunning in TestCaseTest"
>               test = WasRun("testMethod")
>               assert(not test.wasRun)
>               test.run()
>               assert(test.wasRun)
>       def testSetUp(self):
>               print "testSetUp in TestCaseTest"
>               test = WasRun("testMethod")
>               test.run()
Shouldn't it be test.setUp() instead ?

Unless the problem is here:

### TestCase.run() calls self.setUp()
class TestCase:
        (snip)
        def run(self):
                print "run in TestCase"
                self.setUp()
                method = getattr(self, self.name)
                method()

### WasRun.run() doesn't call self.setUp()
class WasRun(TestCase):
        (snip)
        def run(self):
                print "run in WasRun"
                method = getattr(self, self.name)
                method()
        def setUp(self):
                print "in setUp of WasRun"
                self.wasSetUp = 1


BTW, if the only reason for overloading WasRun.run() is to print "run in
WasRun", you can also modify parent's class run() method so it display
the effective class name, not an hard-coded one:

class TestCase:
        (snip)
        def run(self):
                print "run in %s" % self.__class__.__name__
                self.setUp()
                method = getattr(self, self.name)
                method()

and then remove run() from WasRun.

There should be a simple solution to 'aspect' the debug/trace stuff with
a decorator, like:

def traced(func):
  def _wrapper(self, *args, **kwargs):
    print "%s method in %s class" % (func.func_name,
                                     self.__class__.__name)
    return func(self, *args, **kwargs)

  return _wrapper(func)

class TestCase:
        @traced
        def run(self):
                self.setUp()
                method = getattr(self, self.name)
                method()

(not tested, and I don't have much experience with decorators...)

-- 
bruno desthuilliers
ruby -e "print '[EMAIL PROTECTED]'.split('@').collect{|p|
p.split('.').collect{|w| w.reverse}.join('.')}.join('@')"
python -c "print '@'.join(['.'.join([w[::-1] for w in p.split('.')]) for
p in '[EMAIL PROTECTED]'.split('@')])"
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to