Opened 3 years ago

Closed 2 years ago

Last modified 18 months ago

#18727 closed Cleanup/optimization (fixed)

Remove django.test._doctest

Reported by: aaugustin Owned by: nobody
Component: Testing framework Version: master
Severity: Normal Keywords:
Cc: Triage Stage: Accepted
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description (last modified by aaugustin)

We have copied this module from the standard library and submitted the patch to Python's bug tracker six years ago: http://bugs.python.org/issue1521051

Unfortunately the ticket is stuck because the patch didn't include tests. Even if tests were added and the patch was committed now, we'd have to deprecate all Pythons <= 3.3 before removing our copy and relying on the stdlib. This isn't going to happen in the next five years.

Patching our copy to support both Python 2 and 3 increases severely the amount of changes from Python's version. It becomes much harder to apply upstream changes. We could copy both the version from 2.7 and the version from 3.2, apply the patch to both, and import the right one, but that adds complexity.

I think we'd better deprecate our copy:

  • doctests aren't a suitable tool for testing Django apps (IMO),
  • we moved away from using doctests in Django's test suite,
  • Russell suggested it two years ago in the tickets comments.

Change History (8)

comment:1 Changed 3 years ago by aaugustin

  • Description modified (diff)

comment:2 Changed 3 years ago by russellm

  • Triage Stage changed from Unreviewed to Design decision needed

I'm the author of that ticket, and the person responsible for there being no tests. If I'd finished the job in 2006, it would have been a non-issue, but as it is, we have a headache.

However, we need to be clear about what it is we'd be deprecating -- it's not just removing our copy of doctests, we'd be deprecating the ability for Django's test runner to identify and include doctests. The reason the modified doctest package exists is for integration with our test runner; if we remove the duplicate package, we lose the features we need to integrate with the test runner.

Since the doctest-ocalypse, this isn't an issue for Django itself; however, I can imagine that it may be problematic for some users.

Personally, I have no problems killing doctests in this way. I'm sure others share my enthusiasm. I'm also sure that some do not.

Another way to tackle this problem -- make it part of #17365. If we change our test discovery mechanism to be something standardized, we can fall back on the standardized behaviour, which won't include doctests by default.

comment:3 Changed 2 years ago by aaugustin

  • Triage Stage changed from Design decision needed to Accepted

Let's do this with #17365 then.

comment:4 Changed 2 years ago by Carl Meyer <carl@…>

  • Resolution set to fixed
  • Status changed from new to closed

In 9012833af857e081b515ce760685b157638efcef:

Fixed #17365, #17366, #18727 -- Switched to discovery test runner.

Thanks to Preston Timmons for the bulk of the work on the patch, especially
updating Django's own test suite to comply with the requirements of the new
runner. Thanks also to Jannis Leidel and Mahdi Yusuf for earlier work on the
patch and the discovery runner.

Refs #11077, #17032, and #18670.

comment:5 Changed 2 years ago by carljm

Closing this ticket, as django.test._doctest has now been deprecated and will be removed on the normal deprecation schedule.

comment:6 Changed 2 years ago by Florian Apolloner <florian@…>

In e23a5f9a4730ddecb8f3950ee2936716f458c506:

Fixed a regression in the test runner loading of runtests.py.

Refs #17365, #17366, #18727.

comment:7 Changed 2 years ago by Florian Apolloner <florian@…>

In 2bf403ecbd958bfb269794b36e61b69f0aede4cf:

Fixed a regression from e23a5f9a4730ddecb8f3950ee2936716f458c506.

Excluded postgis specific gis tests from other spatial databases.

Refs #17365, #17366, #18727.

comment:8 Changed 18 months ago by Tim Graham <timograham@…>

In bf5430a20b65b3e76a2f8cd2580101e0baa59f82:

Removed django.test.simple and django.test._doctest per deprecation timeline.

refs #17365, #17366, #18727.

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