Python unittest пропустить тест только для одного подкласса - PullRequest
0 голосов
/ 25 сентября 2018

Допустим, у меня настроен юнит-тест следующим образом:

import unittest

class BaseTest(object):
    def setup(self):
        self.foo = None

    def test_something(self):
        self.assertTrue(self.foo.something())

    def test_another(self):
        self.assertTrue(self.foo.another())

    def test_a_third_thing(self):
        self.assertTrue(self.foo.a_third_thing())

class TestA(BaseTest, unittest.TestCase):
    def setup(self):
        self.foo = FooA()


class TestB(BaseTest, unittest.TestCase):
    def setup(self):
        self.foo = FooB()


class TestC(BaseTest, unittest.TestCase):
    def setup(self):
        self.foo = FooC()

Теперь, скажем, FooC еще не реализован a_third_thing, и я хочу пропустить test_a_third_thing ТОЛЬКО дляTestC класс.Есть ли способ использовать декоратор @unittest.skipif для этого?Или какой-то другой удобный способ пропустить этот тест только для этого класса?

Python 2.7, в случае, если это имеет значение

Ответы [ 2 ]

0 голосов
/ 27 сентября 2018

Возможно, вам не нужно «пропускать» тест.Один простой подход состоит в том, чтобы переопределить базовый тест с помощью фиктивного.

class TestC(BaseTest, unittest.TestCase):
    def setup(self):
        self.foo = FooC()

    def test_a_third_thing(self):
        """Override the assertions of the base test."""
        pass
0 голосов
/ 25 сентября 2018

Вы не можете использовать @unittest.skipif здесь, потому что оно вычисляется во время модуля, а необходимая проверка должна выполняться во время выполнения.

Для достижения желаемого результата ваш test_a_third_thing в базовом классе должен выглядеть следующим образом:

class BaseTest(unittest.TestCase):   
    def test_a_third_thing(self):
        if not getattr(self.foo, "a_third_thing", None):
            self.skipTest(self.foo.__class__.__name__ + ' has no a_third_thing, skip')
        else:
            self.assertTrue(self.foo.a_third_thing())

Также исправьте опечатки в вашем примере от setup до setUp.Удалите unittest.TestCase из списка наследования тестовых классов и добавьте в базовый класс.

...