能否在单个assertIn语句中设置多条件同时校验多个目标值存在
问题解答
原生unittest.TestCase.assertIn方法无法直接在单条语句中完成多成员的包含校验,该方法的参数设计仅支持单次传入1个待检查成员,方法签名为:
assertIn(member, container, msg=None)
如果要完成两个字符串同时存在于body的校验,有两种常用实现方式:
- 单断言语句实现(满足单条断言完成校验的需求)
借助all()函数搭配生成器表达式,传入assertTrue即可实现单条断言校验所有目标值,只要有任意一个关键词不存在于body中,就会触发你定义的错误提示:self.assertTrue( all(item in body for item in ('dns', 'dns_cache_expire_time')), 'Querying failed' ) - 常规推荐写法(可精准定位缺失字段)
如果没有强制要求必须使用单条assertIn语句,更推荐分开写两次assertIn,哪个字段缺失会直接在对应断言行抛出错误,排查问题效率更高:self.assertIn('dns', body, 'Querying failed: missing dns field') self.assertIn('dns_cache_expire_time', body, 'Querying failed: missing dns cache expire time field')
注意:不要尝试给
assertIn第一个参数直接传元组/列表形式的待检查值实现多条件判断,这种写法会变成校验「整个待检查列表/元组」是否是body的成员,而非校验列表里的每个元素都在body中,会出现逻辑错误。
内容的提问来源于stack exchange,提问作者RR HS
相关产品推荐
相关产品推荐

