python - 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))
解决方案
如我上次编辑中所述,断言不同对象的属性:
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)
推荐阅读
- c++ - Correct use of friend for using multiple strategies without losing state?
- python - 从带有列表条目的列表条目的熊猫列创建字典的有效方法,其中列表元素是键
- c# - 如何将一个模型类的属性值调用到另一个模型类?
- typescript - 如何在 TypeScript 中合并两个函数定义?
- mongodb - 无法对我的集合执行一些异步猫鼬查询操作
- python - 编写循环以从 .csv 中的每个单元格获取输入以用于另一个程序
- python - Google cloud texttospeech 仅适用于列表中的第一个字符串
- c# - 我的 Html-BeginForm 正在将空值传递给我的控制器
- c# - Unity 不使用 TypeFruit 破坏 ontriggerenter2d 对象
- python-3.x - 如何将浮点数组转换为唯一整数数组?