Enable unittest.TestCase to be instantiated without providing a method name.
Changed unittestgui to show number of discovered tests in the status bar.
This commit is contained in:
parent
faa8c13ef4
commit
32e1d8340c
|
@ -721,6 +721,11 @@ Test cases
|
||||||
Here, we create two instances of :class:`WidgetTestCase`, each of which runs a
|
Here, we create two instances of :class:`WidgetTestCase`, each of which runs a
|
||||||
single test.
|
single test.
|
||||||
|
|
||||||
|
.. versionchanged::
|
||||||
|
`TestCase` can be instantiated successfully without providing a method
|
||||||
|
name. This makes it easier to experiment with `TestCase` from the
|
||||||
|
interactive interpreter.
|
||||||
|
|
||||||
*methodName* defaults to :meth:`runTest`.
|
*methodName* defaults to :meth:`runTest`.
|
||||||
|
|
||||||
:class:`TestCase` instances provide three groups of methods: one group used
|
:class:`TestCase` instances provide three groups of methods: one group used
|
||||||
|
|
|
@ -274,12 +274,17 @@ class TestCase(object):
|
||||||
"""
|
"""
|
||||||
self._testMethodName = methodName
|
self._testMethodName = methodName
|
||||||
self._outcomeForDoCleanups = None
|
self._outcomeForDoCleanups = None
|
||||||
|
self._testMethodDoc = 'No test'
|
||||||
try:
|
try:
|
||||||
testMethod = getattr(self, methodName)
|
testMethod = getattr(self, methodName)
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
raise ValueError("no such test method in %s: %s" %
|
if methodName != 'runTest':
|
||||||
(self.__class__, methodName))
|
# we allow instantiation with no explicit method name
|
||||||
self._testMethodDoc = testMethod.__doc__
|
# but not an *incorrect* or missing method name
|
||||||
|
raise ValueError("no such test method in %s: %s" %
|
||||||
|
(self.__class__, methodName))
|
||||||
|
else:
|
||||||
|
self._testMethodDoc = testMethod.__doc__
|
||||||
self._cleanups = []
|
self._cleanups = []
|
||||||
|
|
||||||
# Map types to custom assertEqual functions that will compare
|
# Map types to custom assertEqual functions that will compare
|
||||||
|
|
|
@ -77,6 +77,16 @@ class Test_TestCase(unittest.TestCase, TestEquality, TestHashing):
|
||||||
|
|
||||||
self.assertEqual(Test().id()[-13:], '.Test.runTest')
|
self.assertEqual(Test().id()[-13:], '.Test.runTest')
|
||||||
|
|
||||||
|
# test that TestCase can be instantiated with no args
|
||||||
|
# primarily for use at the interactive interpreter
|
||||||
|
test = unittest.TestCase()
|
||||||
|
test.assertEqual(3, 3)
|
||||||
|
with test.assertRaises(test.failureException):
|
||||||
|
test.assertEqual(3, 2)
|
||||||
|
|
||||||
|
with self.assertRaises(AttributeError):
|
||||||
|
test.run()
|
||||||
|
|
||||||
# "class TestCase([methodName])"
|
# "class TestCase([methodName])"
|
||||||
# ...
|
# ...
|
||||||
# "Each instance of TestCase will run a single test method: the
|
# "Each instance of TestCase will run a single test method: the
|
||||||
|
|
|
@ -23,6 +23,9 @@ Core and Builtins
|
||||||
Library
|
Library
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
- `unittest.TestCase` can be instantiated without a method name; for simpler
|
||||||
|
exploration from the interactive interpreter.
|
||||||
|
|
||||||
- Issue #10798: Reject supporting concurrent.futures if the system has too
|
- Issue #10798: Reject supporting concurrent.futures if the system has too
|
||||||
few POSIX semaphores.
|
few POSIX semaphores.
|
||||||
|
|
||||||
|
|
|
@ -276,13 +276,15 @@ class TkTestRunner(BaseGUITestRunner):
|
||||||
self.test_file_glob_pattern = d.test_file_glob_pattern
|
self.test_file_glob_pattern = d.test_file_glob_pattern
|
||||||
|
|
||||||
def notifyTestsDiscovered(self, test_suite):
|
def notifyTestsDiscovered(self, test_suite):
|
||||||
|
discovered = test_suite.countTestCases()
|
||||||
self.runCountVar.set(0)
|
self.runCountVar.set(0)
|
||||||
self.failCountVar.set(0)
|
self.failCountVar.set(0)
|
||||||
self.errorCountVar.set(0)
|
self.errorCountVar.set(0)
|
||||||
self.remainingCountVar.set(test_suite.countTestCases())
|
self.remainingCountVar.set(discovered)
|
||||||
self.progressBar.setProgressFraction(0.0)
|
self.progressBar.setProgressFraction(0.0)
|
||||||
self.errorListbox.delete(0, tk.END)
|
self.errorListbox.delete(0, tk.END)
|
||||||
self.statusVar.set("Discovering tests from %s" % self.directory_to_read)
|
self.statusVar.set("Discovering tests from %s. Found: %s" %
|
||||||
|
(self.directory_to_read, discovered))
|
||||||
self.stopGoButton['state'] = tk.NORMAL
|
self.stopGoButton['state'] = tk.NORMAL
|
||||||
|
|
||||||
def createWidgets(self):
|
def createWidgets(self):
|
||||||
|
|
Loading…
Reference in New Issue