summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/testscenarios/scenarios.py23
-rw-r--r--lib/testscenarios/tests/__init__.py3
-rw-r--r--lib/testscenarios/tests/test_scenarios.py4
3 files changed, 18 insertions, 12 deletions
diff --git a/lib/testscenarios/scenarios.py b/lib/testscenarios/scenarios.py
index e052c22..9538b33 100644
--- a/lib/testscenarios/scenarios.py
+++ b/lib/testscenarios/scenarios.py
@@ -27,6 +27,7 @@ from itertools import (
chain,
product,
)
+import sys
import unittest
from testtools.testcase import clone_test_with_new_id
@@ -138,12 +139,15 @@ def per_module_scenarios(attribute_name, modules):
example, in both Python and C, and we want to apply the same tests to
both, but the C module may sometimes not be available.
- Note: if the module can't be loaded, it's silently omitted from
- testing.
+ Note: if the module can't be loaded, the sys.exc_info() tuple for the
+ exception raised during import of the module is used instead of the module
+ object. A common idiom is to check in setUp for that and raise a skip or
+ error for that case. No special helpers are supplied in testscenarios as
+ yet.
:param attribute_name: A name to be set in the scenario parameter
dictionary (and thence onto the test instance) pointing to the
- implementation module for this scenario.
+ implementation module (or import exception) for this scenario.
:param modules: An iterable of (short_name, module_name), where
the short name is something like 'python' to put in the
@@ -154,12 +158,9 @@ def per_module_scenarios(attribute_name, modules):
for short_name, module_name in modules:
try:
mod = __import__(module_name, {}, {}, [''])
- except ImportError:
- # TODO: optionally pass this back through a callback, so it can be
- # logged etc?
- pass
- else:
- scenarios.append((
- short_name,
- {attribute_name: mod}))
+ except:
+ mod = sys.exc_info()
+ scenarios.append((
+ short_name,
+ {attribute_name: mod}))
return scenarios
diff --git a/lib/testscenarios/tests/__init__.py b/lib/testscenarios/tests/__init__.py
index e5e2bbe..6230212 100644
--- a/lib/testscenarios/tests/__init__.py
+++ b/lib/testscenarios/tests/__init__.py
@@ -38,5 +38,6 @@ def load_tests(standard_tests, module, loader):
test_mod_names = [prefix + test_module for test_module in test_modules]
standard_tests.addTests(loader.loadTestsFromNames(test_mod_names))
doctest.set_unittest_reportflags(doctest.REPORT_ONLY_FIRST_FAILURE)
- standard_tests.addTest(doctest.DocFileSuite("../../../README"))
+ standard_tests.addTest(
+ doctest.DocFileSuite("../../../README", optionflags=doctest.ELLIPSIS))
return standard_tests
diff --git a/lib/testscenarios/tests/test_scenarios.py b/lib/testscenarios/tests/test_scenarios.py
index 1fe12ed..97aa17f 100644
--- a/lib/testscenarios/tests/test_scenarios.py
+++ b/lib/testscenarios/tests/test_scenarios.py
@@ -251,7 +251,11 @@ class TestPerModuleScenarios(testtools.TestCase):
('unittest', 'unittest'),
('nonexistent', 'nonexistent'),
])
+ self.assertEqual('nonexistent', s[-1][0])
+ self.assertIsInstance(s[-1][1]['the_module'], tuple)
+ s[-1][1]['the_module'] = None
self.assertEqual(s, [
('Python', {'the_module': testscenarios}),
('unittest', {'the_module': unittest}),
+ ('nonexistent', {'the_module': None}),
])