- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
http://lists.idyll.org/pipermail/testing-in-python/2013-March/005467.html
我昨天发布了这个。我无意匆忙和重复。但我想尽快解决这个问题。同时我将测试各个测试模块。此外,一般来说,stackoverflow 的用户数量比邮件列表的用户数量还要多。
我在 base.py
中有一个基本单元测试类。对于 test_bitbucket.py
,我继承来自基本单元测试类。我想向 test_bitbucket.py
添加新的测试用例和类所以,我发现了性能问题。
我在tests/small中运行了nosetests
并且得到了这些混合结果
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
我知道 requests 是一个很大的库,但是对性能的影响是疯狂的,使用和不使用新测试类的时间分别从 1.1 秒增加到 14.5 秒。
有趣的是,如果我们单独运行test_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 时几乎相同。
有什么想法吗?我对 Nose 测试内部了解不够。
最佳答案
这是一种猜测,因为我不知道您的请求代码的作用......
mock autospec argument用于创建与模拟对象具有相同签名的模拟。要进行此设置,the create_autospec() function必须对被替换的对象进行一些认真的、递归的内省(introspection)。我猜想这个过程对于您的请求库来说很慢。
首先要考虑的是你为什么要自动指定?您是否担心对模拟对象的调用没有正确的签名?这是一个合理的防范措施,但我认为不值得 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的阅读,看起来这应该限制对create_autospec()的递归调用。当然,它将改变模拟的行为,因此我会仔细测试它以确保它达到您的预期。
关于python - Nose 测试有问题吗?使用 autospec=True 添加新案例将需要 15 秒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15257964/
/usr/local/bin/ruby -rrubygems -e "require 'redgreen'" /usr/local/lib/ruby/gems/1.8/gems/rspec-1.3.
我想断言 Python 类中的一个类方法使用一组特定的参数调用另一个类方法。我希望模拟的类方法是“规范的”,因此它会检测是否使用错误数量的参数调用它。 当我使用 patch.object(.., au
我有一个类,它使用@property 装饰器定义了一些属性。当我修补该类并设置 autospec=True 时,我希望该属性的行为符合规范 class MyClass(object): def
在使用 mock.patch 及其变体时,我什么时候应该使用 autospec=True? 一方面,this article警告我们始终使用 autospec=True: ... you should
我想知道这是否在 StackOverflow 上有它的位置,但由于它与编程相关,我会把它扔掉。 这是我的问题。我是 TDD 的新手,我喜欢 Ruby,所以我走的明显路径是用 rspec 测试东西。为什
图书馆模块: # mod.py def foo(): bar1("arg1") bar2("arg2x", "arg2y") def bar1(x): pass def bar
我已经使用 prefix 在 Mac OS X Leopard 上安装了 Ruby 1.9.1 和 Ruby 1.8.6。和 program-suffix选项,以便我可以通过发出 ruby19、i
假设我有一个像下面这样的简单装饰方法: def my_decorator(fn): def _wrapper(*args, **kwargs): print 'Calling decora
我想在文件更改时自动启动构建。 我在 Ruby 中使用过 autospec (RSpec) 并且喜欢它。 如何在 bash 中做到这一点? 最佳答案 看看incron和 inotify-tools .
安装 rspec/ZenTest 并运行 autospec 后,它按预期第一次运行了我的规范。在对我的一个规范进行更改并在第二次运行时,我得到以下结果: /usr/bin/ruby1.8 /usr/l
我的理解是,此处使用的最简单形式的 autospec 将根据提供的参数检查被模拟的函数的签名。其目的是在它们不匹配时引发错误。在下面的代码中,它似乎注入(inject)了一个额外的参数——对象本身。为
我想模拟一个具有以下要求的类: 该类具有公共(public)读/写属性,在其 __init__() 方法中定义 该类具有在创建对象时自动递增的公共(public)属性 我希望使用 autospec=T
我有这个工厂: Factory.define :email_address do |e| e.sequence(:address) { |n| "factory_#{n}@example.com"
试图围绕 Spec 和 Autospec 之间的区别进行思考。他们似乎差不多。具体来说,如果您查看 mock.patch 装饰器。 有人可以解释什么时候使用哪个? https://docs.pytho
http://lists.idyll.org/pipermail/testing-in-python/2013-March/005467.html 我昨天发布了这个。我无意匆忙和重复。但我想尽快解决这
我总是运行 autospec 以同时运行功能和 RSpec,但在我的本地计算机上运行所有功能通常很耗时。我会在提交代码之前运行每个功能。 我想在 autospec 命令中传递参数。 autospec
我是一名优秀的程序员,十分优秀!