Python утверждают, что свойства содержатся в словаре - PullRequest
0 голосов
/ 15 марта 2020

Я пишу модульный тест в Python, и в основном у меня есть класс с атрибутами, и я хочу убедиться, что эти атрибуты содержатся в другом объекте. Например, у меня есть следующий класс:

class TestingConfig(Config):
    DEBUG = False
    TESTING = True
    SECRET_KEY = ''

Что я хочу проверить, так это то, что эти свойства с их значениями содержатся в экземпляре объекта, что-то вроде:

t = list(dict(TestingConfig.__dict__).keys())[1:-1] # remove __module__ and __doc__
self.assertIn(t, list(dict(app.config).keys()))

где app.config - это экземпляр с возможными атрибутами.

Конечно, это не работает, но просто хотел дать идею.

РЕДАКТИРОВАТЬ:

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

attrs = set(list(dict(TestingConfig.__dict__))[1:-1])

self.assertTrue(attrs.issubset(set(list(dict(app.config)))))

РЕДАКТИРОВАТЬ:

Я получил это ! Я надеюсь, что это поможет кому-то в будущем.

attrs = set(sorted(TestingConfig.__dict__.items())[:-2])
i = set(dict(app.config).items())
self.assertTrue(attrs.issubset(i))

1 Ответ

0 голосов
/ 15 марта 2020

Как указано в моем последнем редактировании, для утверждения свойств различных объектов:

env_config_attrs = set(sorted(TestingConfig.__dict__.items())[:-2])
app_config_attrs = set(dict(app.config).items())
self.assertTrue(env_config_attrs.issubset(app_config_attrs))

альтернативное использование vars вместо __ dict __ :

env_config_attrs = set(sorted(vars(TestingConfig).items())[:-2])
app_config_attrs = set(dict(app.config).items())

self.assertTrue(env_config_attrs.issubset(app_config_attrs))

Примечание: Этот вид теста я использую, чтобы убедиться, что мои объекты конфигурации правильно инициализированы. Это утверждение выше юнит тестирует это:

app = Flask(__name__)

config = ProductionConfig

if app.config['ENV'] == 'development':
  config = DevelopmentConfig
elif app.config['ENV'] == 'testing':
  config = TestingConfig

app.config.from_object(config)
...