<p>在测试工作中经常要对两个dict进行校验,而且dict可能是多层嵌套的,为此写了个递归函数。工作方便多了</p>
<p>代码如下</p>
<p>知识点:递归函数中必须有全局变量(C++中传引用的变量),所以在python中使用字典来保存每次递归结果</p>
<p>如例子中的dicresult.</p>
<p></p>
<p>#递归函数<br>
def _assertdict(expobj=None,actobj=None,dicresult=None,key=None):<br>
spacestr = " "<br>
bresult = dicresult['result']<br>
if (type(actobj) != type(expobj)):<br>
tempstr = "actobj's type not equal expobj's type and actobj's type is %s expobj's type is %s"%(type(actobj),type(expobj))<br>
bresult = bresult and False<br>
dicresult['result'] = bresult<br>
dicresult['logstr'] = dicresult['logstr'] + '/n' + tempstr<br>
if (type(actobj) == dict) and (type(expobj) == dict):<br>
for e in actobj:<br>
a_dict = actobj[e]<br>
if e in expobj:<br>
e_dict = expobj[e]<br>
_assertdict(a_dict,e_dict,dicresult,e)<br>
else:<br>
tempstr = spacestr + "not find sub dict key is",e<br>
bresult = bresult and False<br>
dicresult['result'] = bresult<br>
dicresult['logstr'] = dicresult['logstr'] + '/n' + tempstr<br>
elif(type(actobj) == list) and (type(expobj) == list):<br>
if len(actobj) != len(expobj):<br>
tempstr = spacestr + " key%s's len is not equal"%(key)<br>
bresult = bresult and False<br>
dicresult['result'] = bresult<br>
dicresult['logstr'] = dicresult['logstr'] + '/n' + tempstr<br>
return<br><br>
for i in range(len(actobj)):<br>
a_list = actobj[i]</p>
<p>
e_list = expobj[i]<br>
if a_list != a_list:<br>
tempstr = spacestr + " key:%s[%d]'s value is not equal"%(key,i)<br>
dicresult['logstr'] = dicresult['logstr'] + '/n' + tempstr<br>
_assertdict(a_list,e_list,dicresult,key+'[%d]'%i) <br>
else:<br>
if actobj == expobj:<br>
bresult = bresult and True<br>
dicresult['result'] = bresult<br>
else:<br>
if key!=None:<br>
tempstr = spacestr + "assert key: %s error and act value is %s and exp value is %s"%(key,actobj,expobj)<br>
dicresult['logstr'] = dicresult['logstr'] + '/n' + tempstr<br>
bresult = bresult and False<br>
dicresult['result'] = bresult</p>
<p></p>
<p>调用封装的函数</p>
<p>def assertdict(params,expobj=None,actobj=None,msg=None):<br>
dicresult = {}<br>
dicresult['logstr'] = ""<br>
dicresult['result'] = True<br>
_assertdict(expobj,actobj,dicresult)<br>
print dicresult<br>
if dicresult['result']:<br>
asserttrue(params,"assert dict success" + dicresult['logstr'],msg) //框架自带的断言函数,可忽略<br>
else:<br>
assertfalse(params,"assert dict failed" + dicresult['logstr'],msg) //框架自带的断言函数,可忽略</p>
<p></p>
<p></p>
分享到:
相关推荐
使用assert断言是学习python一个非常好的习惯,python assert 断言句语格式及用法很简单。在没完善一个程序之前,我们不知道程序在哪里会出错,与其让它在运行最崩溃,不如在出现错误条件时就崩溃,这时候就需要...
Python中的`assert`语句是一种调试工具,它用于在编程时检查特定条件是否为真。如果这个条件为真,程序将继续执行;但如果条件为假,`assert`会引发一个`AssertionError`异常,中断程序执行并提供有关失败的详细信息...
下面将详细解释Python 3中的`assert`断言以及它与Python 2的区别。 ### Python 3中的`assert`语句 `assert`语句的基本语法是: ```python assert 条件, "错误信息" ``` 这里,`条件`是你期望为真的表达式,如果...
本项目“业务异常提示处理 springboot+Assert(自定义断言)”着重于利用Spring Boot的特性来构建高效、易维护的业务逻辑,并通过自定义断言提升代码的可读性和可维护性。下面我们将详细探讨这些知识点。 1. **Spring...
### Python3 assert断言实现原理 在Python编程中,`assert`语句是一种非常有用的调试工具,它可以在开发阶段帮助开发者发现程序中的错误,并提供反馈。`assert`语句的基本用法是:如果指定的表达式计算结果为`False...
- **断言(Assert)**:断言是一种用于确认预期结果与实际结果是否一致的方式。当断言失败时,测试将立即停止,并报告错误。这有助于快速定位问题所在。 - **验证(Verify)**:验证同样用于比较预期结果与实际结果...
Java断言(assert) Java断言是一种 debugging 机制,允许开发者在Java程序中添加检查点,以确保程序的正确性。断言可以在开发和测试阶段使用,以确保程序的正确性和可靠性。 Java断言的历史 Java断言是从 JDK 1.4 ...
在Python编程中,断言(assert)是一种用于验证程序状态的工具,它可以帮助开发者确保代码中的某些条件为真。如果断言的条件为假,则程序会抛出一个AssertionError异常。断言通常用于捕获编程错误,验证函数参数,...
在Node.js中,`assert`模块提供了丰富的断言方法来帮助开发者确保程序的正确性。以下是对`assert`模块中各个方法的详细说明: 1. `assert(value[, message])`: 这是最基础的断言方法,它检查给定的`value`是否为真...
在Python编程语言中,`assert`关键字是一种调试工具,它允许程序员在代码中插入检查点,以确保程序在特定时刻的逻辑是正确的。当`assert`后面的表达式为`True`时,`assert`语句不会有任何动作,程序将继续执行。然而...
Python延迟断言延迟又名。 python的软断言几个功能: - No Dependenices on any other framework/library.- Should work with any testing framework.- Can be use as decorator or context manager.安装通过点子...
python assert断言是声明布尔值必须为真的判定,如果发生异常就说明表达式为假。 可以理解assert断言语句为raise-if-not,用来测试表示式,其返回值为假,就会触发异常。 assert的语法格式: assert expression 它...
### 深入探讨C++中的引用和ASSERT断言 #### 引用 **引用**是C++中的一项重要特性,它本质上是一个已存在的变量的别名。这意味着当我们通过引用访问一个变量时,实际上就是在直接操作那个变量。理解引用的工作原理...
在上面的代码示例中,`assert page.title() == "百度一下,你就知道"`就是一个断言,用于验证页面标题是否符合预期。断言是测试中的重要组成部分,它能确保程序执行的结果符合我们的期望。在这个例子中,如果页面...
在本篇文章中,我们将深入探讨如何在VC中使用`assert`断言,以及它在软件开发中的作用。 `assert`宏定义在`<assert.h>`头文件中,主要用于测试假设条件。当程序运行到含有`assert`的语句时,如果表达式的值为零(即...