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收集有关测试的更多信息。它们收集测试是成功还是失败,是什么导致了错误,捕获抛出的任何异常,以及测试的任何输出。然后将这个数据集合操纵到您需要的任何输出中,无论是stdout还是xml文件。这一切只需要花费时间,并且需要大量的函数开销才能完成,正如前面所说的那样,一个断言或多或少是内联的,并显示一个错误以及文件和行号。在</p> <p>两人在幕后有着巨大的不同。在</p>
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
尽管Python中的所有内容都是引用,为什么Python导师在没有指针的列表中绘制字符串和整数?
10 回答
尽管python中的表达式为false,但循环仍在运行
8 回答
尽管python代码正确,但从nifi ExecuteScript处理器获取语法错误
1 回答
尽管Python在Neovim中工作得很好,但插件不能识别Neovim中的Python主机
9 回答
尽管python字典包含了大量的条目,但它并没有增长
9 回答
尽管python说模块存在,为什么我会得到这个消息?
8 回答
尽管setuptools和控制盘是最新的,但无法识别singleversionexternallymanaged
3 回答
尽管stdout和stderr重定向,但未捕获错误消息
1 回答
尽管Tensorboard的事件太大,但Tensorboard的步骤太少了
10 回答
尽管tkinter上的变量已更改,但显示未更改
4 回答
尽管try/except使用Python进行单元测试时出现断言错误
8 回答
尽管URL是sam,但仍会抛出“达到最大重定向”
8 回答
尽管url有效,Pandas仍读取url的\u csv错误
3 回答
尽管while中存在时间延迟,但LINUX线程的CPU利用率为100%(1)
1 回答
尽管x0在范围内,Scipy优化仍会引发ValueError
1 回答
尽管xpath正确,但使用selenium单击链接仍不起作用
1 回答
尽管下载了ffmpeg并设置了路径变量python,但没有后端错误
7 回答
尽管下载了i,但找不到型号“fr”
10 回答
尽管下载了plotnine包,但未获取名为“plotnine”的模块时出错
4 回答
尽管为所有行指定了权重,网格(0)仍不起作用
7 回答