From c923c0a7e9bd3bf53674e98a2bf45313bc12d10d Mon Sep 17 00:00:00 2001 From: Mariusz Felisiak Date: Wed, 27 Mar 2024 12:53:57 +0100 Subject: [PATCH 1/2] gh-60492: Allow customizing test names in TextTestResult. Thanks Chris Jerdonek for the implementation idea. --- Doc/whatsnew/3.13.rst | 6 +++++ Lib/test/test_unittest/test_result.py | 24 +++++++++++++++++++ Lib/unittest/runner.py | 8 +++++-- ...4-03-27-13-05-28.gh-issue-60492.EfCUSI.rst | 2 ++ 4 files changed, 38 insertions(+), 2 deletions(-) create mode 100644 Misc/NEWS.d/next/Library/2024-03-27-13-05-28.gh-issue-60492.EfCUSI.rst diff --git a/Doc/whatsnew/3.13.rst b/Doc/whatsnew/3.13.rst index aba672dcb3f456..0ed2308cfcabb2 100644 --- a/Doc/whatsnew/3.13.rst +++ b/Doc/whatsnew/3.13.rst @@ -674,6 +674,12 @@ unicodedata * The Unicode database has been updated to version 15.1.0. (Contributed by James Gerity in :gh:`109559`.) +unittest +-------- + +* The new ``TextTestResult.getName()`` method allows customizing test names in + test results. + venv ---- diff --git a/Lib/test/test_unittest/test_result.py b/Lib/test/test_unittest/test_result.py index 15e3f62ef66a4b..6118b1e1e32ced 100644 --- a/Lib/test/test_unittest/test_result.py +++ b/Lib/test/test_unittest/test_result.py @@ -467,6 +467,30 @@ def testGetDescriptionWithoutDocstring(self): 'testGetDescriptionWithoutDocstring (' + __name__ + '.Test_TextTestResult.testGetDescriptionWithoutDocstring)') + def testCustomGetNameWithoutDocstring(self): + class CustomGetNameTextTestResult(unittest.TextTestResult): + def getName(self, test): + return test.id() + + result = CustomGetNameTextTestResult(None, True, 1) + expected_test_name = __name__ + ".Test_TextTestResult.testCustomGetNameWithoutDocstring" + self.assertEqual(result.getName(self), expected_test_name) + self.assertEqual(result.getDescription(self), expected_test_name) + + def testCustomGetNameWithDocstring(self): + """Test docstring.""" + class CustomGetNameTextTestResult(unittest.TextTestResult): + def getName(self, test): + return test.id() + + result = CustomGetNameTextTestResult(None, True, 1) + expected_test_name = __name__ + ".Test_TextTestResult.testCustomGetNameWithDocstring" + self.assertEqual(result.getName(self), expected_test_name) + self.assertEqual( + result.getDescription(self), + expected_test_name + "\nTest docstring.", + ) + def testGetSubTestDescriptionWithoutDocstring(self): with self.subTest(foo=1, bar=2): result = unittest.TextTestResult(None, True, 1) diff --git a/Lib/unittest/runner.py b/Lib/unittest/runner.py index 2bcadf0c998bd9..ac79dcc886ff59 100644 --- a/Lib/unittest/runner.py +++ b/Lib/unittest/runner.py @@ -48,10 +48,14 @@ def __init__(self, stream, descriptions, verbosity, *, durations=None): def getDescription(self, test): doc_first_line = test.shortDescription() + test_name = self.getName(test) if self.descriptions and doc_first_line: - return '\n'.join((str(test), doc_first_line)) + return f'{test_name}\n{doc_first_line}' else: - return str(test) + return test_name + + def getName(self, test): + return str(test) def startTest(self, test): super(TextTestResult, self).startTest(test) diff --git a/Misc/NEWS.d/next/Library/2024-03-27-13-05-28.gh-issue-60492.EfCUSI.rst b/Misc/NEWS.d/next/Library/2024-03-27-13-05-28.gh-issue-60492.EfCUSI.rst new file mode 100644 index 00000000000000..61f9d3a8a65536 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2024-03-27-13-05-28.gh-issue-60492.EfCUSI.rst @@ -0,0 +1,2 @@ +Add ``TextTestResult.getName()`` method to allow customizing test names. +Patch by Mariusz Felisiak. From 7e4f41922f92d8f18cd626d922d426ebfdf6d2a1 Mon Sep 17 00:00:00 2001 From: Mariusz Felisiak Date: Sun, 14 Jul 2024 16:55:38 +0200 Subject: [PATCH 2/2] Document getName() method and move release notes. --- Doc/library/unittest.rst | 6 ++++++ Doc/whatsnew/3.13.rst | 6 ------ Doc/whatsnew/3.14.rst | 5 +++++ 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/Doc/library/unittest.rst b/Doc/library/unittest.rst index dc76374d5181eb..a96a0b9dc4a70f 100644 --- a/Doc/library/unittest.rst +++ b/Doc/library/unittest.rst @@ -2204,6 +2204,12 @@ Loading and running tests .. versionchanged:: 3.12 Added the *durations* keyword parameter. + .. method:: getName(test) + + Return a test name used in test results. + + .. versionadded:: 3.14 + .. data:: defaultTestLoader Instance of the :class:`TestLoader` class intended to be shared. If no diff --git a/Doc/whatsnew/3.13.rst b/Doc/whatsnew/3.13.rst index 49b71659af20ce..4a9a0b77d068b3 100644 --- a/Doc/whatsnew/3.13.rst +++ b/Doc/whatsnew/3.13.rst @@ -1184,12 +1184,6 @@ unicodedata * The Unicode database has been updated to version 15.1.0. (Contributed by James Gerity in :gh:`109559`.) -unittest --------- - -* The new ``TextTestResult.getName()`` method allows customizing test names in - test results. - venv ---- diff --git a/Doc/whatsnew/3.14.rst b/Doc/whatsnew/3.14.rst index da9b45cd8e58b3..520ec3dfaea013 100644 --- a/Doc/whatsnew/3.14.rst +++ b/Doc/whatsnew/3.14.rst @@ -135,6 +135,11 @@ symtable (Contributed by Bénédikt Tran in :gh:`120029`.) +unittest +-------- + +* The new :meth:`.TextTestResult.getName` method allows customizing test names + in test results. Optimizations =============