Как издеваться над классом вместо объекта? - PullRequest
0 голосов
/ 19 марта 2019

Как я могу издеваться над следующим?

import os
from unittest import TestCase
from unittest.mock import patch

class A:
    VAR_A = os.environ.get("ABC")

    @classmethod
    def foo(cls):
       return cls.VAR_A

@patch.dict(os.environ, {'ABC': 'abc'})
class Test_A(TestCase):
    def test_foo(self):
        self.assertEqual(A.foo(), 'abc')

Это VAR_A не высмеивается. AssertionError: None != 'abc'

1 Ответ

1 голос
/ 20 марта 2019

Итак, вы хотите проверить свою foo() функцию. Вместо того, чтобы пытаться изменить переменную среды до определения объекта class, попробуйте смоделировать уже существующий атрибут class. Так как объект класса создается до запуска теста, а атрибут VAR_A уже инициализирован.

import os
from unittest import TestCase
from unittest.mock import patch

class A:
    VAR_A = os.environ.get("ABC")

    @classmethod
    def foo(cls):
       return cls.VAR_A

@patch.object(A, 'VAR_A', 'abc')
class Test_A(TestCase):
    def test_foo(self):
        self.assertEqual(A.foo(), 'abc')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...