diff options
author | Abseil Team <absl-team@google.com> | 2019-11-15 11:20:18 -0800 |
---|---|---|
committer | Copybara-Service <copybara-worker@google.com> | 2019-11-15 11:20:42 -0800 |
commit | ea16e318d3a6f5081aecd4628152ea4254946d87 (patch) | |
tree | f204f63d7643927c3ca3c61b7449049b53f6495e | |
parent | 454aa79fcec321e0a7203136fd5a0d0a3bce02ae (diff) | |
download | absl-py-ea16e318d3a6f5081aecd4628152ea4254946d87.tar.gz |
Add a helpful error message to let people know when they've specified named_parameters and forgotten to add names to their parameter tuples rather than crashing later with something obscure.
PiperOrigin-RevId: 280698220
Change-Id: I02cc1eecc3f3310acd0b5ad30f065d6aab240c9d
-rwxr-xr-x | absl/testing/parameterized.py | 4 | ||||
-rwxr-xr-x | absl/testing/tests/parameterized_test.py | 22 |
2 files changed, 26 insertions, 0 deletions
diff --git a/absl/testing/parameterized.py b/absl/testing/parameterized.py index a7cc88b..b67aaeb 100755 --- a/absl/testing/parameterized.py +++ b/absl/testing/parameterized.py @@ -281,6 +281,10 @@ class _ParameterizedTestIter(object): testcase_params = {k: v for k, v in six.iteritems(testcase_params) if k != _NAMED_DICT_KEY} elif _non_string_or_bytes_iterable(testcase_params): + if not isinstance(testcase_params[0], six.string_types): + raise RuntimeError( + 'The first element of named test parameters is the test name ' + 'suffix and must be a string') testcase_name = testcase_params[0] testcase_params = testcase_params[1:] else: diff --git a/absl/testing/tests/parameterized_test.py b/absl/testing/tests/parameterized_test.py index 4235675..85f8e9b 100755 --- a/absl/testing/tests/parameterized_test.py +++ b/absl/testing/tests/parameterized_test.py @@ -677,6 +677,28 @@ class ParameterizedTestsTest(absltest.TestCase): def test_mixed_something(self, unused_obj): pass + def test_named_test_with_no_name_fails(self): + with self.assertRaises(RuntimeError): + + class _(parameterized.TestCase): + + @parameterized.named_parameters( + (0,), + ) + def test_something(self, unused_obj): + pass + + def test_named_test_dict_with_no_name_fails(self): + with self.assertRaises(RuntimeError): + + class _(parameterized.TestCase): + + @parameterized.named_parameters( + {'unused_obj': 0}, + ) + def test_something(self, unused_obj): + pass + def test_parameterized_test_iter_has_testcases_property(self): @parameterized.parameters(1, 2, 3, 4, 5, 6) def test_something(unused_self, unused_obj): # pylint: disable=invalid-name |