Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 鼻子测试的臭虫?添加autospec=True的新案例需要15秒_Python_Unit Testing_Nosetests - Fatal编程技术网

Python 鼻子测试的臭虫?添加autospec=True的新案例需要15秒

Python 鼻子测试的臭虫?添加autospec=True的新案例需要15秒,python,unit-testing,nosetests,Python,Unit Testing,Nosetests,我昨天贴的。我不想匆忙地重复。但我想尽快解决这个问题。我将同时测试各个测试模块。而且,一般来说,stackoverflow的用户比邮件列表的用户多 以下是回购协议: 我在base.py中有一个基本单元测试类。对于test\u bitbucket.py,我继承 来自基本单元测试类。 我想在执行时向test\u bitbucket.py添加新的测试用例和类 所以,我发现了性能问题 我运行了nosetestsinsidetests/small,得到了这些混合结果 Ran 18 tests in 14

我昨天贴的。我不想匆忙地重复。但我想尽快解决这个问题。我将同时测试各个测试模块。而且,一般来说,stackoverflow的用户比邮件列表的用户多

以下是回购协议:

我在
base.py
中有一个基本单元测试类。对于
test\u bitbucket.py
,我继承 来自基本单元测试类。 我想在执行时向
test\u bitbucket.py
添加新的测试用例和类 所以,我发现了性能问题

我运行了
nosetests
insidetests/small,得到了这些混合结果

Ran 18 tests in 14.523s        - autospec=True and test_account_creation
exists

Ran 18 tests in 0.621s         - autospec=False and test_account_creation exists


Ran 17 tests in 1.081s         - autospec=True and test_account_creation is
commented out

Ran 17 tests in 0.090s         - autospec=False, and test_account_creation
commented out
我知道请求是一个很大的库,但是性能的冲击是疯狂的, 从1.1s到14.5s,分别使用和不使用新的测试类

有趣的是,如果我们单独运行
test\u bitbucket.py

(bbpy)yeukhon at yeukhon-P5E-VM-DO:~/hg/bitbucket-python-api/tests/small$
nosetests test_bitbucket.py
...
----------------------------------------------------------------------
Ran 3 tests in 0.090s

OK
在启用/不启用autospec的情况下基本相同


有什么想法吗?我对内部鼻测试了解不够。

这是一种猜测,因为我不知道您的请求代码的作用

用于创建与模拟对象具有相同签名的模拟。要设置这个,必须对被替换的对象进行一些认真的递归自省。我猜这个过程对于您的请求库来说很慢

首先要考虑的是你为什么要自动选择?您是否担心对模拟对象的调用没有正确的签名?这是一个合理的防范措施,但我认为不值得罚15秒

只对请求的一部分进行autospec是否可行?例如:

cls.req_pt = patch(cls.mod_name + '.requests')
cls.requests = cls.req_pt.start()

cls.rim_pt = patch(cls.mod_name + '.requests.really_important_method', autospec=True)
cls.rim = cls.req_pt.start()
另一种尝试是在补丁构造函数中设置
instance=True

cls.req_pt = patch(cls.mod_name + '.requests', autospec=True, instance=True)
cls.requests = cls.req_pt.start()

从我对mock.py的阅读来看,这似乎应该限制递归调用来创建_autospec()。当然,它将改变模拟的行为,所以我会仔细测试它,以确保它符合您的预期。

这是一种猜测,因为我不知道您的请求代码的功能

用于创建与模拟对象具有相同签名的模拟。要设置这个,必须对被替换的对象进行一些认真的递归自省。我猜这个过程对于您的请求库来说很慢

首先要考虑的是你为什么要自动选择?您是否担心对模拟对象的调用没有正确的签名?这是一个合理的防范措施,但我认为不值得罚15秒

只对请求的一部分进行autospec是否可行?例如:

cls.req_pt = patch(cls.mod_name + '.requests')
cls.requests = cls.req_pt.start()

cls.rim_pt = patch(cls.mod_name + '.requests.really_important_method', autospec=True)
cls.rim = cls.req_pt.start()
另一种尝试是在补丁构造函数中设置
instance=True

cls.req_pt = patch(cls.mod_name + '.requests', autospec=True, instance=True)
cls.requests = cls.req_pt.start()

从我对mock.py的阅读来看,这似乎应该限制递归调用来创建_autospec()。当然,它将改变模拟的行为,所以我会仔细测试它,以确保它符合您的期望。

什么是“autospec=True且测试帐户创建存在”?您是在谈论是否在base.UnittestBaseClass的setUpClass中使用autospec吗?我在您链接的任何文件中都没有看到test_account_的创建。它有什么作用?@dbw谢谢你看它。我忘了放文件了。我更新了上面的lunk。基本上,我想添加一个新的测试类。该类中的新测试用例是
test\u account\u creation
。(实际上我给它起的名字略有不同)。下列的我对他们都做了鼻测试。花了15秒。哇!我注释了那个测试用例,它运行了大约1秒。可以这就是我在测试帐户创建存在或删除时的意思。我给出了补丁中
autospec=True/False
时的结果(参见base.py),以及新测试用例
test\u account\u creation
取消/注释时的结果。你说“autospec=True且test\u account\u creation存在”是什么意思?您是在谈论是否在base.UnittestBaseClass的setUpClass中使用autospec吗?我在您链接的任何文件中都没有看到test_account_的创建。它有什么作用?@dbw谢谢你看它。我忘了放文件了。我更新了上面的lunk。基本上,我想添加一个新的测试类。该类中的新测试用例是
test\u account\u creation
。(实际上我给它起的名字略有不同)。下列的我对他们都做了鼻测试。花了15秒。哇!我注释了那个测试用例,它运行了大约1秒。可以这就是我在测试帐户创建存在或删除时的意思。我给出了补丁中
autospec=True/False
时的结果(参见base.py),以及新测试用例
test\u account\u creation
取消/注释时的结果。感谢您在这里和提示邮件列表中回复。那是行不通的。但我会接受你的建议,嘲笑具体的事情。我过会儿再打给你。谢谢感谢您回复这里和提示邮件列表。那是行不通的。但我会接受你的建议,嘲笑具体的事情。我过会儿再打给你。谢谢