按照下面的代码,它无法发现子类。
但是我想在testcase_subA中执行测试(test_sub_1,test_sub_2(。
有没有办法通过基类加载子类测试用例? (没有 unittest.main(((
import unittest
class testcase_A(unittest.TestCase):
text= "Base class"
@classmethod
def setUpClass(cls):
print("setUpClass A")
def setUp(self):
print("setUp A")
def tearDown(self):
print("tearDown A")
@classmethod
def tearDownClass(cls):
print("tearDownClass A")
class testcase_subA(testcase_A):
def test_sub_1(self):
print(self.text)
print("test sub A 1")
def test_sub_2(self):
print("test sub A 2")
class testcase_B(unittest.TestCase):
@classmethod
def setUpClass(cls):
print("setUpClass B")
def setUp(self):
print("setUp B")
def test_b(self):
print("test B")
def tearDown(self):
print("tearDown B")
@classmethod
def tearDownClass(cls):
print("tearDownClass B")
if __name__ == '__main__':
suiteA = unittest.TestLoader().loadTestsFromTestCase(testcase_A)
suiteB = unittest.TestLoader().loadTestsFromTestCase(testcase_B)
suite = unittest.TestSuite([suiteA, suiteB])
print(suite)
runner = unittest.TextTestRunner()
runner.run(suite)
输出:
设置上类 B
设置 B
测试 B
拆解乙
拆下B类
因此,您的子类 A 只有在您指定的情况下才会运行。如果你告诉它只运行父类,它只会运行父类。如果您在 A 的父类中有测试,您将看到输出,但没有。因此,当我编辑您的运行器以包含testcase_subA时,我会得到我认为您想要的输出。如果您使用 pytest 或 nose2 等测试模块运行测试,它也会显示相同的内容
if __name__ == '__main__':
suiteA = unittest.TestLoader().loadTestsFromTestCase(testcase_subA)
suiteB = unittest.TestLoader().loadTestsFromTestCase(testcase_B)
suite = unittest.TestSuite([suiteA, suiteB])
print(suite)
runner = unittest.TextTestRunner()
runner.run(suite)
我得到的输出
setUpClass A
setUp A
Base class
test sub A 1
tearDown A
.setUp A
test sub A 2
tearDown A
.tearDownClass A
setUpClass B
setUp B
test B
tearDown B
.tearDownClass B