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

в библиотеката на unittest python съществуват функциите 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