nose2 icon indicating copy to clipboard operation
nose2 copied to clipboard

nose2 test generation breaks when using the exam helper library

Open NorthIsUp opened this issue 11 years ago • 1 comments

similiar situation as in #80, it seems that a test case is being instantiated, but then a different instance is actually being used when running the test method.

import exam
import unittest2


from exam import before


class SomeTest(exam.Exam, unittest2.TestCase):

    @before
    def before(self):
        # executes before test run
        self.before_id = id(self)
        print 'before_id', self.before_id

    def assert_ids(self):
        print 'test_id', id(self)
        self.assertEqual(self.before_id, id(self))

    def test_someting(self):
        self.assert_ids()

    def test_gen_something(self):
        print 'gen_id', id(self)
        for x in xrange(3):
            yield self.test_someting, ()
gen_id 4505929424
gen_id 4506129040
before_id 4506129808
test_id 4506129808
before_id 4506129296
test_id 4506129040
before_id 4506129488
test_id 4506129040
before_id 4506129680
test_id 4506129040
test_someting (test_foo.SomeTest) ... ok
test_gen_something:1
 (test_foo.SomeTest) ... ERROR
test_gen_something:2
 (test_foo.SomeTest) ... ERROR
test_gen_something:3
 (test_foo.SomeTest) ... ERROR

======================================================================
ERROR: test_gen_something:1
 (test_foo.SomeTest)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/adam/src/tempest/test_foo.py", line 21, in test_someting
    self.assert_ids()
  File "/Users/adam/src/tempest/test_foo.py", line 18, in assert_ids
    self.assertEqual(self.before_id, id(self))
AttributeError: 'SomeTest' object has no attribute 'before_id'

======================================================================
ERROR: test_gen_something:2
 (test_foo.SomeTest)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/adam/src/tempest/test_foo.py", line 21, in test_someting
    self.assert_ids()
  File "/Users/adam/src/tempest/test_foo.py", line 18, in assert_ids
    self.assertEqual(self.before_id, id(self))
AttributeError: 'SomeTest' object has no attribute 'before_id'

======================================================================
ERROR: test_gen_something:3
 (test_foo.SomeTest)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/adam/src/tempest/test_foo.py", line 21, in test_someting
    self.assert_ids()
  File "/Users/adam/src/tempest/test_foo.py", line 18, in assert_ids
    self.assertEqual(self.before_id, id(self))
AttributeError: 'SomeTest' object has no attribute 'before_id'

----------------------------------------------------------------------
Ran 4 tests in 0.025s

FAILED (errors=3)

NorthIsUp avatar Aug 04 '14 22:08 NorthIsUp

this was an error in the exam lib in how it handled descriptors. it has been fixed.

edit: my bad, I this is still an issue. The exam bug fix was unrelated.

NorthIsUp avatar Aug 22 '14 19:08 NorthIsUp