Jeroen T. Vermeulen has proposed merging
lp:~jtv/launchpad/importqueue-test-cleanup into lp:launchpad/devel.
Requested reviews:
Launchpad code reviewers (launchpad-reviewers): code
= Translations Import Queue Test Cleanup =
This cleans up something I just found in a Translations test.
The test uses a popular and valid technique for building multiple variant of
very similar test scenarios: it creates a base class containing the re-usable
tests, and derives from that multiple test cases that define the different
circumstances under which the same tests from the base class are to be run.
However it does this in an awkward way. The base class is derived from
TestCaseWithFactory, so the test runner treats it as a test case and tries to
run it. This is undesirable, and probably won't even work because the base
class lacks some of the specifics needed to set up and run a useful test.
To work around that, the test defines a test_suite function (which we have
otherwise more or less abolished) to define exactly which tests are to be run.
As far as I can see, every test case that is added to the test will have to be
added to test_suite in order for it to become part of the test suite.
There is a better pattern to deal with this particular problem. Because of of
Python's dynamic nature, the base class does not need to be derived from
TestCase (or TestCaseWithFactory). In this branch I remove that derivation,
treating the base test class as a mix-in instead and giving its children a
TestCaseWithFactory as a second base class.
I verified manually (well, using diff) that this runs the exact same tests as
before. Only the order is different. Running "wc -l" on the test output
confirms this.
To test, try this before and after:
{{{
./bin/test -vv lp.translations.tests.test_translationimportqueue
}}}
The output shows the same tests passing, though not necessarily in the same
order.
Jeroen
--
https://code.launchpad.net/~jtv/launchpad/importqueue-test-cleanup/+merge/39931
Your team Launchpad code reviewers is requested to review the proposed merge of
lp:~jtv/launchpad/importqueue-test-cleanup into lp:launchpad/devel.
=== modified file 'lib/lp/translations/tests/test_translationimportqueue.py'
--- lib/lp/translations/tests/test_translationimportqueue.py 2010-10-29 05:58:51 +0000
+++ lib/lp/translations/tests/test_translationimportqueue.py 2010-11-03 06:27:51 +0000
@@ -3,8 +3,6 @@
__metaclass__ = type
-import unittest
-
import transaction
from zope.component import getUtility
@@ -25,7 +23,7 @@
)
-class TestCanSetStatusBase(TestCaseWithFactory):
+class TestCanSetStatusBase:
"""Base for tests that check that canSetStatus works ."""
layer = LaunchpadZopelessLayer
@@ -166,7 +164,7 @@
[False, False, False, False, False, False, False])
-class TestCanSetStatusPOTemplate(TestCanSetStatusBase):
+class TestCanSetStatusPOTemplate(TestCanSetStatusBase, TestCaseWithFactory):
"""Test canStatus applied to an entry with a POTemplate."""
def setUp(self):
@@ -180,7 +178,7 @@
productseries=self.productseries, potemplate=self.potemplate)
-class TestCanSetStatusPOFile(TestCanSetStatusBase):
+class TestCanSetStatusPOFile(TestCanSetStatusBase, TestCaseWithFactory):
"""Test canStatus applied to an entry with a POFile."""
def setUp(self):
@@ -332,16 +330,3 @@
productseries=self.product.series[0])
self.product.owner = self.new_owner
self.assertEqual(self.old_owner, old_entry.importer)
-
-
-def test_suite():
- """Add only specific test cases and leave out the base case."""
- suite = unittest.TestSuite()
- suite.addTest(unittest.makeSuite(TestCanSetStatusPOTemplate))
- suite.addTest(unittest.makeSuite(TestCanSetStatusPOFile))
- suite.addTest(
- unittest.makeSuite(TestCanSetStatusPOTemplateWithQueuedUser))
- suite.addTest(unittest.makeSuite(TestCanSetStatusPOFileWithQueuedUser))
- suite.addTest(unittest.makeSuite(TestGetGuessedPOFile))
- suite.addTest(unittest.makeSuite(TestProductOwnerEntryImporter))
- return suite
_______________________________________________
Mailing list: https://launchpad.net/~launchpad-reviewers
Post to : [email protected]
Unsubscribe : https://launchpad.net/~launchpad-reviewers
More help : https://help.launchpad.net/ListHelp