[Checkins] SVN: zope.testing/trunk/ when a test module does not define a test_suite, first try to load any unittest.TestCase descendants in it before complaining it does not contain any tests

Wolfgang Schnerring wosc at wosc.de
Fri Jul 24 02:38:48 EDT 2009


Log message for revision 102202:
  when a test module does not define a test_suite, first try to load any unittest.TestCase descendants in it before complaining it does not contain any tests
  

Changed:
  U   zope.testing/trunk/CHANGES.txt
  U   zope.testing/trunk/src/zope/testing/testrunner/find.py
  A   zope.testing/trunk/src/zope/testing/testrunner/testrunner-discovery.txt
  U   zope.testing/trunk/src/zope/testing/testrunner/testrunner-errors.txt
  A   zope.testing/trunk/src/zope/testing/testrunner/testrunner-ex/sample1/sampletests_discover.py
  A   zope.testing/trunk/src/zope/testing/testrunner/testrunner-ex/sample1/sampletests_discover_notests.py

-=-
Modified: zope.testing/trunk/CHANGES.txt
===================================================================
--- zope.testing/trunk/CHANGES.txt	2009-07-24 06:35:34 UTC (rev 102201)
+++ zope.testing/trunk/CHANGES.txt	2009-07-24 06:38:47 UTC (rev 102202)
@@ -4,7 +4,8 @@
 3.7.8 (unreleased)
 ==================
 
-- ...
+- Testrunner automatically picks up descendants of unittest.TestCase in test
+  modules, so you don't have to provide a test_suite() anymore.
 
 3.7.7 (2009-07-15)
 ==================

Modified: zope.testing/trunk/src/zope/testing/testrunner/find.py
===================================================================
--- zope.testing/trunk/src/zope/testing/testrunner/find.py	2009-07-24 06:35:34 UTC (rev 102201)
+++ zope.testing/trunk/src/zope/testing/testrunner/find.py	2009-07-24 06:38:47 UTC (rev 102202)
@@ -153,7 +153,15 @@
                         )
                 else:
                     try:
-                        suite = getattr(module, options.suite_name)()
+                        if hasattr(module, options.suite_name):
+                            suite = getattr(module, options.suite_name)()
+                        else:
+                            suite = unittest.defaultTestLoader.loadTestsFromModule(module)
+                            if suite.countTestCases() == 0:
+                                raise TypeError(
+                                    "Module %s does not define any tests"
+                                    % module_name)
+
                         if isinstance(suite, unittest.TestSuite):
                             check_suite(suite, module_name)
                         else:

Added: zope.testing/trunk/src/zope/testing/testrunner/testrunner-discovery.txt
===================================================================
--- zope.testing/trunk/src/zope/testing/testrunner/testrunner-discovery.txt	                        (rev 0)
+++ zope.testing/trunk/src/zope/testing/testrunner/testrunner-discovery.txt	2009-07-24 06:38:47 UTC (rev 102202)
@@ -0,0 +1,48 @@
+Automatically discovering tests
+===============================
+
+You can explicitly specify which tests to run by providing a unittest.TestSuite
+object (or a callable that returns one) in the test modules (the name of the
+object or function can be configured with the --suite-name parameter, it
+defaults to 'test_suite'). If no such object is present, testrunner will use
+all classes in the module that inherit from unittest.TestCase as tests:
+
+    >>> import os, sys
+    >>> directory_with_tests = os.path.join(this_directory, 'testrunner-ex')
+
+    >>> from zope.testing import testrunner
+
+    >>> defaults = [
+    ...     '--path', directory_with_tests,
+    ...     '--tests-pattern', '^sampletestsf?$',
+    ...     ]
+    >>> sys.argv = ['test',
+    ...             '--tests-pattern', '^sampletests_discover$',
+    ...     ]
+    >>> testrunner.run(defaults)
+    Running zope.testing.testrunner.layer.UnitTests tests:
+      Set up zope.testing.testrunner.layer.UnitTests in N.NNN seconds.
+      Ran 1 tests with 0 failures and 0 errors in N.NNN seconds.
+    Tearing down left over layers:
+      Tear down zope.testing.testrunner.layer.UnitTests in N.NNN seconds.
+    False
+
+If the module neither provides a TestSuite nor has discoverable tests,
+testrunner will exit with an error to prevent acidentally missing test cases:
+
+    >>> sys.argv = ['test',
+    ...             '--tests-pattern', '^sampletests_discover_notests$',
+    ...     ]
+    >>> testrunner.run(defaults)
+    Test-module import failures:
+    <BLANKLINE>
+    Module: sample1.sampletests_discover_notests
+    <BLANKLINE>
+    TypeError: Module sample1.sampletests_discover_notests does not define any tests
+    <BLANKLINE>
+    <BLANKLINE>
+    <BLANKLINE>
+    Test-modules with import problems:
+      sample1.sampletests_discover_notests
+    Total: 0 tests, 0 failures, 0 errors in 0.000 seconds.
+    True

Modified: zope.testing/trunk/src/zope/testing/testrunner/testrunner-errors.txt
===================================================================
--- zope.testing/trunk/src/zope/testing/testrunner/testrunner-errors.txt	2009-07-24 06:35:34 UTC (rev 102201)
+++ zope.testing/trunk/src/zope/testing/testrunner/testrunner-errors.txt	2009-07-24 06:38:47 UTC (rev 102202)
@@ -728,12 +728,6 @@
     ImportError: No module named huh
     <BLANKLINE>
     <BLANKLINE>
-    Module: sample2.sample22.sampletests_i
-    <BLANKLINE>
-    Traceback (most recent call last):
-    AttributeError: 'module' object has no attribute 'test_suite'
-    <BLANKLINE>
-    <BLANKLINE>
     Module: sample2.sample23.sampletests_i
     <BLANKLINE>
     Traceback (most recent call last):
@@ -779,7 +773,6 @@
     Test-modules with import problems:
       sample2.sampletests_i
       sample2.sample21.sampletests_i
-      sample2.sample22.sampletests_i
       sample2.sample23.sampletests_i
     Total: 213 tests, 0 failures, 0 errors in N.NNN seconds.
     True

Added: zope.testing/trunk/src/zope/testing/testrunner/testrunner-ex/sample1/sampletests_discover.py
===================================================================
--- zope.testing/trunk/src/zope/testing/testrunner/testrunner-ex/sample1/sampletests_discover.py	                        (rev 0)
+++ zope.testing/trunk/src/zope/testing/testrunner/testrunner-ex/sample1/sampletests_discover.py	2009-07-24 06:38:47 UTC (rev 102202)
@@ -0,0 +1,5 @@
+import unittest
+
+class TestA(unittest.TestCase):
+    def test_truth(self):
+        self.assert_(True)

Added: zope.testing/trunk/src/zope/testing/testrunner/testrunner-ex/sample1/sampletests_discover_notests.py
===================================================================
--- zope.testing/trunk/src/zope/testing/testrunner/testrunner-ex/sample1/sampletests_discover_notests.py	                        (rev 0)
+++ zope.testing/trunk/src/zope/testing/testrunner/testrunner-ex/sample1/sampletests_discover_notests.py	2009-07-24 06:38:47 UTC (rev 102202)
@@ -0,0 +1,2 @@
+def test_function_that_would_never_be_run():
+    self.assert_(True)



More information about the Checkins mailing list