skipIf не пропускает тестовый метод, который уже выполнил условие

#python #unit-testing #pycharm

#python #модульное тестирование #pycharm

Вопрос:

Вот мой код, я не уверен, что мне не хватает или я пропускаю какой-то код, но он не пропускает тест2.

 import unittest

class AppTesting (unittest.TestCase):
 skipYes = ""

def test_1(self):
    print("Test 1: "   str(AppTesting.skipYes))
    AppTesting.skipYes = "Yes"
    print("Test 1: "   str(AppTesting.skipYes))

@unittest.skipIf(str(skipYes) == "Yes", "Skip condition")
def test_2(self):
    print("Test 2 skipYes is: "   str(AppTesting.skipYes))
    print("This is Test 2")

def test_3(self):
    print("This is Test 3")


if __name__ == "__main__":
    unittest.main()
  

Ответ №1:

Ваш декоратор оценивается, когда модуль загружается при тестовом запуске вместе с определением тестового класса, следовательно skipYes , переменная в этот момент всегда будет пустой строкой "" , как определено в классе.

Изменение этой переменной внутри тестовых методов не будет иметь никакого значения, поскольку тестировщик уже собрал, какие тесты запускать, а какие пропускать.

В качестве решения, начиная с Python 3.4, вы можете использовать подтесты:

 class MyTestCase(unittest.TestCase):
    def test_some(self):
        skipTest = False

        with self.subTest('subtest1'):
            self.assertTrue(False)

        ...

        if not skipTest:
            with self.subTest('subtest2'):
                self.assertFalse(True)
  

ДОКУМЕНТЫ: https://docs.python.org/3/library/unittest.html#различение-тест-итераций-использование-subtests

Комментарии:

1. Я вижу, я планирую пропустить test_2 , в зависимости от результата test_1 , и я не уверен, как я получу значение для test_1 , именно по этой причине я создал переменную skipYes … Мне трудно исследовать это. не могли бы вы помочь мне, братан? Будет ли способ изменить значение переменной?