mirror of https://github.com/python/cpython
unittest.TestLoader.loadTestsFromName honors the loader suiteClass attribute. Issue 6866.
This commit is contained in:
parent
ee2df03009
commit
5a9719d627
|
@ -509,6 +509,9 @@ changes, or look through the Subversion logs for all the details.
|
|||
(automatically pass or fail without checking decimal places) if the objects
|
||||
are equal.
|
||||
|
||||
* :meth:`loadTestsFromName` properly honors the ``suiteClass`` attribute of
|
||||
the :class:`TestLoader`. (Fixed by Mark Roddy; :issue:`6866`.)
|
||||
|
||||
* A new hook, :meth:`addTypeEqualityFunc` takes a type object and a
|
||||
function. The :meth:`assertEqual` method will use the function
|
||||
when both of the objects being compared are of the specified type.
|
||||
|
|
|
@ -554,6 +554,47 @@ class Test_TestLoader(TestCase):
|
|||
self.assertTrue(isinstance(suite, loader.suiteClass))
|
||||
self.assertEqual(list(suite), [testcase_1])
|
||||
|
||||
# "The specifier name is a ``dotted name'' that may resolve ... to
|
||||
# ... a callable object which returns a TestCase ... instance"
|
||||
#*****************************************************************
|
||||
#Override the suiteClass attribute to ensure that the suiteClass
|
||||
#attribute is used
|
||||
def test_loadTestsFromName__callable__TestCase_instance_ProperSuiteClass(self):
|
||||
class SubTestSuite(unittest.TestSuite):
|
||||
pass
|
||||
m = types.ModuleType('m')
|
||||
testcase_1 = unittest.FunctionTestCase(lambda: None)
|
||||
def return_TestCase():
|
||||
return testcase_1
|
||||
m.return_TestCase = return_TestCase
|
||||
|
||||
loader = unittest.TestLoader()
|
||||
loader.suiteClass = SubTestSuite
|
||||
suite = loader.loadTestsFromName('return_TestCase', m)
|
||||
self.assertTrue(isinstance(suite, loader.suiteClass))
|
||||
self.assertEqual(list(suite), [testcase_1])
|
||||
|
||||
# "The specifier name is a ``dotted name'' that may resolve ... to
|
||||
# ... a test method within a test case class"
|
||||
#*****************************************************************
|
||||
#Override the suiteClass attribute to ensure that the suiteClass
|
||||
#attribute is used
|
||||
def test_loadTestsFromName__relative_testmethod_ProperSuiteClass(self):
|
||||
class SubTestSuite(unittest.TestSuite):
|
||||
pass
|
||||
m = types.ModuleType('m')
|
||||
class MyTestCase(unittest.TestCase):
|
||||
def test(self):
|
||||
pass
|
||||
m.testcase_1 = MyTestCase
|
||||
|
||||
loader = unittest.TestLoader()
|
||||
loader.suiteClass=SubTestSuite
|
||||
suite = loader.loadTestsFromName('testcase_1.test', m)
|
||||
self.assertTrue(isinstance(suite, loader.suiteClass))
|
||||
|
||||
self.assertEqual(list(suite), [MyTestCase('test')])
|
||||
|
||||
# "The specifier name is a ``dotted name'' that may resolve ... to
|
||||
# ... a callable object which returns a TestCase or TestSuite instance"
|
||||
#
|
||||
|
|
|
@ -85,7 +85,7 @@ class TestLoader(object):
|
|||
elif (isinstance(obj, types.UnboundMethodType) and
|
||||
isinstance(parent, type) and
|
||||
issubclass(parent, case.TestCase)):
|
||||
return suite.TestSuite([parent(obj.__name__)])
|
||||
return self.suiteClass([parent(obj.__name__)])
|
||||
elif isinstance(obj, suite.TestSuite):
|
||||
return obj
|
||||
elif hasattr(obj, '__call__'):
|
||||
|
@ -93,7 +93,7 @@ class TestLoader(object):
|
|||
if isinstance(test, suite.TestSuite):
|
||||
return test
|
||||
elif isinstance(test, case.TestCase):
|
||||
return suite.TestSuite([test])
|
||||
return self.suiteClass([test])
|
||||
else:
|
||||
raise TypeError("calling %s returned %s, not a test" %
|
||||
(obj, test))
|
||||
|
|
Loading…
Reference in New Issue