Python中文
首页
教程
问答
标签
搜索
登录
注册
为什么unittest的assert方法比原始断言慢?
回答此问题可获得
20
贡献值,回答如果被采纳可获得
50
分。
<p>unittest有许多assert方法。我对使用内置Python<code>assert</code>和比较运算符与内置的简单unittest断言进行了timeit测试。在</p> <pre><code>#!/usr/bin/python import timeit s = """\ import unittest class TestRepomanManExtFunctions(unittest.TestCase): def test1(self): someObj = object() newObj = someObj self.assertEqual(someObj, newObj) def test2(self): str1 = '11111111111111111111111111111111111111' str2 = '33333333333333333333333333333333333333' self.assertNotEqual(str1, str2) if __name__ == '__main__': unittest.main() """ t = timeit.Timer(stmt=s) print "%.2f usec/pass" % (1000000 * t.timeit(number=100000)/100000) s2 = """\ import unittest class TestRepomanManExtFunctions(unittest.TestCase): def test1(self): someObj = object() newObj = someObj assert someObj == newObj def test2(self): str1 = '11111111111111111111111111111111111111' str2 = '33333333333333333333333333333333333333' assert str1 != str2 if __name__ == '__main__': unittest.main() """ t = timeit.Timer(stmt=s2) print "%.2f usec/pass" % (1000000 * t.timeit(number=100000)/100000) </code></pre> <p>结果是</p> ^{pr2}$ <p>使用unittest的内置assert方法的一个优点是它告诉用户实际要比较的内容。我实际测试的一个例子:</p> <pre><code>====================================================================== FAIL: test_000_write_to_file_directory_not_exist (__main__.TestRepomanManExtFunctions) Test writing content to a new file whose parent directory ---------------------------------------------------------------------- Traceback (most recent call last): File "/usr/local/lib/python2.7/dist-packages/mock.py", line 1224, in patched return func(*args, **keywargs) File "test_ext.py", line 71, in test_000_write_to_file_directory_not_exist self.assertNotEqual(mk_exists.call_args_list, exists_call_list) AssertionError: [call('/tmp/test/fake/')] == [call('/tmp/test/fake/')] </code></pre> <p>这里使用的是简单的<code>assert X = Y</code></p> <pre><code>====================================================================== FAIL: test_000_write_to_file_directory_not_exist (__main__.TestRepomanManExtFunctions) Test writing content to a new file whose parent directory ---------------------------------------------------------------------- Traceback (most recent call last): File "/usr/local/lib/python2.7/dist-packages/mock.py", line 1224, in patched return func(*args, **keywargs) File "test_ext.py", line 72, in test_000_write_to_file_directory_not_exist assert exists_call_list != mk_exists.call_args_list AssertionError </code></pre> <p>除了这一优势,我们还可以利用内置的<code>self.assert_*(...)</code>做些什么呢?在</p> <p>为什么生的更快?我知道访问属性和检查类通常比较慢。但我也想知道发生了什么事?我希望这是一个有效的问题。在</p> <p>谢谢</p>
0 条评论
分类:
Python问答
请先
登录
后评论
默认排序
时间排序
1 个回答
匿名
1天前
擅长:python、mysql、java
<p>与内联执行的assert关键字相比,assert*函数可能更慢,因为调用它(将参数推送到堆栈、调用、从堆栈弹出返回地址等)有开销。assert*函数还有其他一些很好的属性,如打印预期值和实际值。在</p> <p>你是出于好奇还是真的有问题?我会惊讶地看到任何情况下,断言的速度是一个瓶颈。在</p>
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
如何在python中从数据帧列中删除分类值?
10 回答
如何在python中从数据帧列表中删除引号
4 回答
如何在python中从数据帧创建列表
8 回答
如何在Python中从数据帧创建嵌套的JSON
9 回答
如何在Python中从数据帧显示wordcloud
10 回答
如何在Python中从数据帧的时间戳中删除字符
1 回答
如何在Python中从数据帧绘制简单绘图?
4 回答
如何在python中从数据帧行提取具有特定长度的范围?
3 回答
如何在python中从数据帧设置dict中的值
8 回答
如何在Python中从数据库中获得一个结果
3 回答
如何在python中从数据框中绘制分类条形图
5 回答
如何在Python中从数据框中选择特定细节?
4 回答
如何在python中从数据集中删除unicode
8 回答
如何在python中从数据集中删除某些数值?
6 回答
如何在python中从数据集中选择行
9 回答
如何在Python中从数组中删除元素
6 回答
如何在python中从数组中删除单个倒逗号?
6 回答
如何在python中从数组中删除对象?
8 回答
如何在python中从数组中删除引号
2 回答
如何在python中从数组中删除所有最小值
9 回答