Хорошо, что вы пытаетесь сохранить свои тесты независимыми.В вашем конкретном случае у вас есть несколько опций.
Опция 1: вы можете предоставить явный статический метод init для вашего класса MyClass
.Такой метод может затем использоваться в ваших тестах.
test_increase_value(self):
MyClass.init()
MyClass.increase_value()
self.assertEqual(MyClass.class_att, 1)
Это лишает ваши модульные тесты прямого доступа к внутренним компонентам класса, чтобы вернуть класс в исходное состояние.Это также может быть хорошим выбором, если вы обнаружите, что в вашем коде есть другие причины, чтобы иметь такую возможность, не только по причинам модульного тестирования.
Вариант 2. Сбросьте состояние класса из ваших юнит-тестов, так какбыл показан Mebin Joe.Это делает ваши тесты немного менее стабильными, потому что вы каким-то образом дублируете внутренние компоненты класса и, следовательно, должны изменить свои тесты, если изменения в классе.Вы можете сделать это с помощью setUp
и teardown
(что в этом случае было бы предпочтительным) или непосредственно из каждого теста (только для демонстрации):
test_increase_value(self):
MyClass.class_att = 0
MyClass.increase_value()
self.assertEqual(MyClass.class_att, class_att_before + 1)
MyClass.class_att = 0 # bring back to initial state
Вариант 3: напишите свои тесты такони также надежно работают независимо от состояния класса:
test_increase_value(self):
class_att_before = MyClass.class_att
MyClass.increase_value()
self.assertEqual(MyClass.class_att, class_att_before + 1)
У этого есть пара недостатков: тестовый код становится сложнее для чтения, и может быть нелегко реализовать все желаемые тестовые примеры таким образом.
Резюме: Я бы рекомендовал выбрать вариант 1, если вы действительно не хотите такой метод инициализации.Тогда вариант 2 предпочтительнее, чем 3, для которого я не вижу много применений.