Merge pull request #83 from wolever/issue-73-setup-teardown
Fix issue #73: setup/teardown in parameterized classes
diff --git a/CHANGELOG.txt b/CHANGELOG.txt
index f471735..af6122c 100644
--- a/CHANGELOG.txt
+++ b/CHANGELOG.txt
@@ -1,3 +1,6 @@
+0.7.1 (2019-11-19)
+ * Fix #73: calling `setUp` and `tearDown` in parameterized classes
+
0.7.0 (2019-02-05)
* Added parameterized_class feature, for parameterizing entire test
classes (many thanks to @TobyLL for their suggestions and help testing!)
diff --git a/parameterized/parameterized.py b/parameterized/parameterized.py
index 96a662f..dd9f0ed 100644
--- a/parameterized/parameterized.py
+++ b/parameterized/parameterized.py
@@ -591,4 +591,15 @@
test_class_module[name] = type(name, (base_class, ), test_class_dict)
+ # We need to leave the base class in place (see issue #73), but if we
+ # leave the test_ methods in place, the test runner will try to pick
+ # them up and run them... which doesn't make sense, since no parameters
+ # will have been applied.
+ # Address this by iterating over the base class and remove all test
+ # methods.
+ for method_name in list(base_class.__dict__):
+ if method_name.startswith("test_"):
+ delattr(base_class, method_name)
+ return base_class
+
return decorator
diff --git a/parameterized/test.py b/parameterized/test.py
index c5fae1c..0621b6a 100644
--- a/parameterized/test.py
+++ b/parameterized/test.py
@@ -481,13 +481,35 @@
])
class TestParameterizedClassDict(TestCase):
expect([
+ "TestParameterizedClassDict_0:setUp(1, 0)",
+ "TestParameterizedClassDict_0:tearDown(1, 0)",
"TestParameterizedClassDict_0:test_method(1, 0)",
"TestParameterizedClassDict_1:test_method(0, 1)",
+ "TestParameterizedClassDict_1:setUp(0, 1)",
+ "TestParameterizedClassDict_1:tearDown(0, 1)",
])
foo = 0
bar = 0
+ def setUp(self):
+ # Ensure that super() works (issue #73)
+ super(TestParameterizedClassDict, self).setUp()
+ missing_tests.remove("%s:setUp(%r, %r)" %(
+ self.__class__.__name__,
+ self.foo,
+ self.bar,
+ ))
+
+ def tearDown(self):
+ # Ensure that super() works (issue #73)
+ super(TestParameterizedClassDict, self).tearDown()
+ missing_tests.remove("%s:tearDown(%r, %r)" %(
+ self.__class__.__name__,
+ self.foo,
+ self.bar,
+ ))
+
def test_method(self):
missing_tests.remove("%s:test_method(%r, %r)" %(
self.__class__.__name__,
diff --git a/setup.py b/setup.py
index 0082729..8c2dc57 100644
--- a/setup.py
+++ b/setup.py
@@ -14,7 +14,7 @@
setup(
name="parameterized",
- version="0.7.0",
+ version="0.7.1",
url="https://github.com/wolever/parameterized",
license="FreeBSD",
author="David Wolever",