Opened 11 years ago
Closed 9 years ago
#18586 closed Cleanup/optimization (fixed)
Rewrite unit tests migrated from doctests
Reported by: | Michal Petrucha | Owned by: | Michael Blatherwick |
---|---|---|---|
Component: | Testing framework | Version: | dev |
Severity: | Normal | Keywords: | unit tests |
Cc: | Peter Zsoldos, amizya@… | Triage Stage: | Accepted |
Has patch: | yes | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | yes | UI/UX: | no |
Description (last modified by )
There's quite a lot of unit tests that have been rewritten 1:1 from doctests. These tests tend to verify all aspects of a certain feature at once, they modify the state of the database throughout the whole test and by the end of the test no one really knows what the database state is supposed to be.
For example, tests.generic_relations.GenericRelationsTests.test_generic_relations
walks through most of the features supported by GenericForeignKeys
, it is 130 lines long and in case the last assertion fails, you'll have to spend ridiculous amounts of time figuring out what happened.
A likely incomplete list of similar tests:
tests.basic.ModelTest.test_lookup
tests.basic.ModelTest.test_object_creation
tests.custom_columns.CustomColumnsTests.test_db_column
tests.custom_managers.CustomManagerTests.test_manager
tests.custom_pk.CustomPKTests.test_custom_pk
tests.defer.DeferTests.test_defer
tests.expressions.ExpressionsTests.test_filter
tests.field_subclassing.CustomField.test_custom_field (deprecated)
tests.get_or_create.GetOrCreateTests.test_get_or_create
tests.m2m_recursive.RecursiveM2MTests.test_recursive_m2m
tests.m2m_signals.ManyToManySignalsTest
tests.m2m_through.M2mThroughTests
tests.m2m_through_regress.M2MThroughTestCase
tests.model_inheritance.ModelInheritanceTests
tests.model_package.ModelPackageTests.test_model_packages
tests.order_with_respect_to.OrderWithRespectToTests.test_basic
tests.signals.SignalTests.test_basic
This ticket is meant to track all of them; each time a test is updated, we can strike it out in the list above and once there is no item left, we can close this. The point is to make the test suite help developers as much as possible.
Change History (67)
comment:1 Changed 11 years ago by
Owner: | changed from nobody to anonymous |
---|---|
Status: | new → assigned |
comment:2 Changed 11 years ago by
Owner: | changed from anonymous to Mark Smith |
---|---|
Status: | assigned → new |
comment:3 Changed 11 years ago by
Owner: | changed from Mark Smith to anonymous |
---|---|
Status: | new → assigned |
Triage Stage: | Unreviewed → Accepted |
comment:4 Changed 11 years ago by
Owner: | changed from anonymous to Mark Smith |
---|---|
Status: | assigned → new |
comment:5 Changed 11 years ago by
Status: | new → assigned |
---|
Basic test refactorings now committed at https://github.com/bedmondmark/django/tree/test_refactor - I'll issue a Pull Request when I've finished the whole lot.
comment:6 Changed 11 years ago by
Found another candidate: regressiontests.defer_regress.DeferRegressionTest.test_basic
IMO, this test is broken because its results depend on the order of execution of tests as it accesses the global model class storage. This means it won't be that easy to rewrite this test.
comment:7 Changed 11 years ago by
Component: | Uncategorized → Testing framework |
---|
comment:8 Changed 11 years ago by
Tried Merging the pull request by koniiik, there were lot of conflicts. The test directory layout has changed and also the conventions used needed to be re-worked.
Will be re-writing the tests and issue a pull request as and when they are done.
https://github.com/django/django/pull/923 , for the test " Custom Columns " .
comment:9 Changed 11 years ago by
I'd just like to note that cutting single tests in multiple tests has a cost for the test suite, as the database is flushed between tests. So it's right and fine to separate tests when testing different features, but don't just create test methods for each single database request.
comment:11 Changed 11 years ago by
Description: | modified (diff) |
---|
comment:12 Changed 11 years ago by
Description: | modified (diff) |
---|
comment:13 Changed 11 years ago by
@claudep If you want to look over the initial PR I just committed and comment on whether you think these tests are split up too finely, I'd like to make sure we have consensus on the right level of test granularity before @modi.konark moves forward with more PRs.
comment:14 Changed 11 years ago by
Carl, I guess we're also entering personal style here.
For example in that commit, I would have regrouped test_get_first_name
/test_filter_first_name
and probably also the 3 last (test_get_all_authors_for_an_article
/test_get_all_articles_for_an_author
/test_get_author_m2m_relation
), particularly as they are only querying data.
But once again, this is just me, and I can understand others have different approaches.
comment:16 Changed 10 years ago by
Description: | modified (diff) |
---|
comment:17 Changed 10 years ago by
Hi. I just created https://github.com/liavkoren-vmfarms/djangoDev/tree/ticket_18586 which refactors modeltests.get_or_create.GetOrCreateTests.test_get_or_create into smaller units and changes comments over to docstrings.
I just created a pull request for this patch.
comment:18 Changed 10 years ago by
I am going to start working on modeltests.basic.ModelTest.test_lookup
comment:19 Changed 10 years ago by
Description: | modified (diff) |
---|
comment:20 Changed 10 years ago by
I'm at the DjangoCon Europe Sprint and working on splitting up modeltests.basic.ModelTest.test_object_creation
(by the way, now it's called basic.tests.ModelTest.test_object_creation
)
Patch is at https://github.com/django/django/pull/2671
[update: pull requests is now squashed into a single commit]
comment:21 Changed 10 years ago by
Has patch: | set |
---|
comment:22 Changed 10 years ago by
Cc: | Peter Zsoldos added |
---|
comment:23 Changed 10 years ago by
I have committed a pull request for the first reported unit test modeltests.generic_relations.GenericRelationsTests.test_generic_relations
. You can check the PR in Github.
comment:26 Changed 9 years ago by
Has patch: | unset |
---|
comment:27 Changed 9 years ago by
Owner: | Mark Smith deleted |
---|---|
Status: | assigned → new |
comment:28 Changed 9 years ago by
Owner: | set to ChillarAnand |
---|---|
Status: | new → assigned |
comment:30 Changed 9 years ago by
Patch for M2mThroughTests refactor is at https://github.com/django/django/pull/3273
comment:31 Changed 9 years ago by
Description: | modified (diff) |
---|
comment:33 Changed 9 years ago by
Description: | modified (diff) |
---|
comment:34 Changed 9 years ago by
Patch for ModelTest.test_lookup: https://github.com/django/django/pull/3306
comment:36 Changed 9 years ago by
Description: | modified (diff) |
---|
comment:37 Changed 9 years ago by
Opened PR for custom pks here:
https://github.com/django/django/pull/3483
comment:38 Changed 9 years ago by
Description: | modified (diff) |
---|
comment:39 Changed 9 years ago by
Opened PR for custom_managers here:
https://github.com/django/django/pull/3491
comment:40 Changed 9 years ago by
Description: | modified (diff) |
---|
comment:41 Changed 9 years ago by
Description: | modified (diff) |
---|
comment:42 Changed 9 years ago by
PR for order_with_respect_to:
https://github.com/django/django/pull/3638
comment:43 Changed 9 years ago by
PR for model_package.ModelPackageTests.test_models_packages: https://github.com/django/django/pull/3657
comment:44 Changed 9 years ago by
Resolution: | → fixed |
---|---|
Status: | assigned → closed |
comment:45 Changed 9 years ago by
Resolution: | fixed |
---|---|
Status: | closed → new |
Woops, should have been "refs #" in the commit message of that last one so this didn't get closed as there is still more work to do in the other tests.
comment:46 Changed 9 years ago by
PR for model_inheritance.ModelInheritanceTests https://github.com/django/django/pull/3658.
comment:48 Changed 9 years ago by
Description: | modified (diff) |
---|
comment:55 Changed 9 years ago by
Cc: | amizya@… added |
---|
I'll work on m2m_signals
and m2m_through_regress
comment:57 Changed 9 years ago by
Description: | modified (diff) |
---|
comment:58 Changed 9 years ago by
Owner: | changed from ChillarAnand to alainivars |
---|---|
Status: | new → assigned |
comment:59 Changed 9 years ago by
Owner: | alainivars deleted |
---|---|
Status: | assigned → new |
comment:60 Changed 9 years ago by
Owner: | set to alainivars |
---|---|
Status: | new → assigned |
comment:62 Changed 9 years ago by
Description: | modified (diff) |
---|
comment:63 Changed 9 years ago by
Owner: | alainivars deleted |
---|---|
Status: | assigned → new |
comment:64 Changed 9 years ago by
Owner: | set to Michael Blatherwick |
---|---|
Status: | new → assigned |
comment:67 Changed 9 years ago by
Resolution: | → fixed |
---|---|
Status: | assigned → closed |
Last attempt to get the status of this ticket correct.