首页 > 解决方案 > Python断言属性包含在字典中

问题描述

我正在用 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))

标签: pythonunit-testingflask

解决方案


如我上次编辑中所述,断言不同对象的属性:

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)

推荐阅读