Opened 6 years ago

Closed 5 years ago

Last modified 5 years ago

#14049 closed Cleanup/optimization (fixed)

Fixture loading should be skipped for TestCase decorated with @skip*

Reported by: Piotr Czachur Owned by: Paul McMillan
Component: Testing framework Version: 1.2
Severity: Normal Keywords:
Cc: Triage Stage: Accepted
Has patch: yes Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description

TransactionTestCase overrides unittest.TestCase.__call__() and always runs _fixture_setup(), even for skipped tests (decorated with @skip* from unittest).
It makes no sense at all and it's really waste of time to wait for those fixtures to load.

class TransactionTestCase(unittest.TestCase):
    def _pre_setup(self):
        """Performs any pre-test setup. This includes:

            * Flushing the database.
            * If the Test Case class has a 'fixtures' member, installing the
              named fixtures.
            * If the Test Case class has a 'urls' member, replace the
              ROOT_URLCONF with it.
            * Clearing the mail test outbox.
        """
        self._fixture_setup()
        self._urlconf_setup()
        mail.outbox = []

    # ...

    def __call__(self, result=None):
        """
        Wrapper around default __call__ method to perform common Django test
        set up. This means that user-defined Test Cases aren't required to
        include a call to super().setUp().
        """
        self.client = Client()
        try:
            self._pre_setup()   # LOAD FOR EVERY TestCase
        except (KeyboardInterrupt, SystemExit):
            raise
        except Exception:
            import sys
            result.addError(self, sys.exc_info())
            return
        super(TransactionTestCase, self).__call__(result)  # HERE @skip* decorators are honoured

Attachments (1)

14049.diff (2.0 KB) - added by Ramiro Morales 5 years ago.

Download all attachments as: .zip

Change History (10)

comment:1 Changed 6 years ago by Piotr Czachur

Needs documentation: unset
Needs tests: unset
Patch needs improvement: unset

It's related to #12991

comment:2 Changed 6 years ago by Paul McMillan

Owner: changed from nobody to Paul McMillan
Status: newassigned
Triage Stage: UnreviewedAccepted

I assume this applies when the patch from #12991 is applied and/or you're using Python 2.7 to test your app. I'm assigning this to myself, but I probably won't actually fix the problem until #12991 is resolved.

comment:3 Changed 6 years ago by Paul McMillan

More broadly, the test running framework needs some cleanup in light of the changes to unittest, so this may get rolled into that.

comment:4 Changed 6 years ago by Piotr Czachur

Paul,
in fact I'm using unittest from 2.7 under Python 2.6 (I'm aware of existence unittest2, but unitest from 2.7 works just fine for me).
Cheers.

comment:5 Changed 5 years ago by Julien Phalip

Severity: Normal
Type: Cleanup/optimization

Changed 5 years ago by Ramiro Morales

Attachment: 14049.diff added

comment:6 Changed 5 years ago by Ramiro Morales

Easy pickings: unset
Has patch: set

comment:7 Changed 5 years ago by Ramiro Morales

Resolution: fixed
Status: assignedclosed

In [16369]:

Fixed #14049 -- Made our TestCase subclasses not load database fixtures (nor set up custom URLconfs) for test methods that are going to be skipped. Thanks zimnyx for the report.

comment:8 Changed 5 years ago by Piotr Czachur

UI/UX: unset

r16369 introduced new bug: #16372

comment:9 Changed 5 years ago by Ramiro Morales

In [16579]:

Fixed #16372 -- Changed strategy implemented in r16369 to fix #14049 to avoid affecting the statistics of test cases ran/skipped kept by unittest. Thanks zimnyx for the report.

Note: See TracTickets for help on using tickets.
Back to Top