#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 … Мне трудно исследовать это. не могли бы вы помочь мне, братан? Будет ли способ изменить значение переменной?