Jak w poniższym kodzie, nie może wykryć podklasy.

Ale chcę wykonać testy (test_sub_1, test_sub_2) w testcase_subA.

Czy istnieje metoda ładowania przypadku testowego podklasy za pośrednictwem klasy bazowej? (bez 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)

Wynik:

setUpClass B

zestaw B

test B

tearDown B.

tearDownClass B.

0
Yun 20 grudzień 2019, 06:10

1 odpowiedź

Twoja podklasa A będzie działać tylko wtedy, gdy ją określisz. Jeśli powiesz mu, aby po prostu uruchomił klasę nadrzędną, uruchomiłby tylko klasę nadrzędną. Gdybyś miał testy w tej klasie nadrzędnej A, zobaczyłbyś wynik, ale tak nie jest. Więc kiedy edytuję twój runner, aby zawierał testcase_subA, wtedy otrzymuję wynik, który myślę, że chcesz. Jeśli uruchomisz test z modułami testowymi, takimi jak pytest lub nose2, również pokaże to samo

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)

Otrzymuję wynik

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
1
w33b 23 grudzień 2019, 07:21