если условие в setUp() игнорировать тест

в библиотеке Python unittest существуют функции setUp и tearDown для установки переменных и других вещей до и после тестов.

как я могу запустить или проигнорировать тест с условием в setUp?


person JuanPablo    schedule 19.05.2014    source источник
comment
Я полагаю, вы могли бы вызвать исключение в вызове setUp; Я ожидаю, что это приведет к тому, что тест не будет запущен. Но это ужасно грязно. Почему вы на самом деле хотите это сделать? Не было бы чище решить, какие тесты запускать в другом месте?   -  person Henry Keiter    schedule 19.05.2014
comment
Связано: stackoverflow.com/questions/19031953/   -  person guettli    schedule 19.05.2014
comment
@HenryKeiter Я использую структуру каталогов теста данных , если какие-то файлы найдены, тест выполняется   -  person JuanPablo    schedule 19.05.2014


Ответы (2)


Вы можете позвонить if cond: self.skipTest('reason') в setUp().

person otus    schedule 19.05.2014
comment
Я реализовал наследование классов для своих модульных тестов, чтобы избежать повторения кода, и, поскольку у меня есть обязательное поле в моих реализациях тестовых случаев, я могу проверить, является ли это поле None в качестве условия для пропуска тестов. Это избавило меня от хакерских вещей, таких как множественное наследование или добавление del MyAbstractTestCase в конец моего модуля. - person sox with Monica; 06.09.2018

Вместо регистрации setUp используйте декоратор skipIf.

@unittest.skipIf(not os.path.exists("somefile.txt"),
                 "somefile.txt is missing")
def test_thing_requiring_somefile(self):
    ...

skipIf также можно использовать в классе, поэтому вы можете пропустить все содержащиеся тесты, если условие не выполняется.

@unittest.skipIf(not os.path.exists("somefile.txt"),
                 "somefile.txt is missing")
class TestStuff(unittest.TestCase):

    def setUp(self):
        ...

    def test_scenario_one(self):
        ...

    def test_scenario_two(self):
        ...
person chepner    schedule 19.05.2014
comment
Обратите внимание, что skipIf, будучи декоратором, не имеет доступа к членам класса, поэтому вы не можете пропустить тесты на основе флага класса (например, вы не можете выполнить @skipIf(self.work_in_progress is True)). - person sox with Monica; 06.09.2018