我一直在寻找一个问题,实现mock来测试一个Pylons控制器的功能。在
我要测试的特定函数可以在这里找到:https://hg.mozilla.org/build/buildapi/file/efe11511f42d/buildapi/controllers/selfserve.py#l210
目标:
我只是试着模拟它调用的函数,这样我就可以确认它最终调用get_的完整性。在
问题:
我可以模仿“好的”、“稳定的”延迟、“失败的”和“分支”的缓存。但说到g.buildapi_cache.get_构建用于修订的,我似乎无法正确地嘲笑它,每次调用revision()时,它都会失败。在
g实际上是pylons.app_globals公司并在自助服务.py控制器如下:'从塔架导入应用程序_globals as g'
测试:
我使用python解释器来测试所有这些。这是我正在尝试的两种实现:http://pastebin.mozilla.org/2931825和{a3}
总而言之,这里是解释器的完整运行,完成了http://pastebin.mozilla.org/2931825的回溯
>>> from buildapi.controllers.selfserve import SelfserveController
>>> from mock import patch, Mock
>>> s = SelfserveController()
>>> s._ok = Mock(name='_ok')
>>> s._get_stable_delay = Mock(return_value=180)
>>> s._branches_cache = Mock()
>>> s._branches_cache = {'try': None}
>>> s._failed = Mock(return_value="Failed")
>>> with patch('buildapi.controllers.selfserve.g.buildapi_cache.get_builds_for_revision') as get_builds_for_revision:
... get_builds_for_revision.return_value = ['baz', 'bang']
... result = revision('try', 'bar')
...
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/jzeller/buildapi-test/lib/python2.7/site-packages/mock.py", line 1252, in __enter__
self.target = self.getter()
File "/Users/jzeller/buildapi-test/lib/python2.7/site-packages/mock.py", line 1414, in <lambda>
getter = lambda: _importer(target)
File "/Users/jzeller/buildapi-test/lib/python2.7/site-packages/mock.py", line 1102, in _importer
thing = _dot_lookup(thing, comp, import_path)
File "/Users/jzeller/buildapi-test/lib/python2.7/site-packages/mock.py", line 1089, in _dot_lookup
return getattr(thing, comp)
File "/Users/jzeller/buildapi-test/lib/python2.7/site-packages/paste/registry.py", line 137, in __getattr__
return getattr(self._current_obj(), attr)
File "/Users/jzeller/buildapi-test/lib/python2.7/site-packages/paste/registry.py", line 197, in _current_obj
'thread' % self.____name__)
TypeError: No object (name: app_globals) has been registered for this thread
这是给http://pastebin.mozilla.org/2931832
^{pr2}$这是我在尝试运行修订版时遇到的相同错误。每次它在这里出错是因为我试图模仿这个app_globals模块失败了,或者看起来是这样。我真的不知道该怎么做。有人有什么想法吗?
以下是一些更好的细节:
注1
我已经看了下面的线程,这些线程似乎不太适用于这个特定的场景,或者我完全没有抓住要点。在
没有初始化的Pylons环境,控制器不能用作独立对象。在
使用Pylons提供的用于测试的功能,可以省去测试控制器的所有样板代码。在
我建议您将TestController类与nosetests结合使用,如documentation所示。在
特别是对于您的代码,我认为Pylons对待private方法(以_u开头)与public方法不同,因为公共方法在请求的上下文中运行。在
相关问题 更多 >
编程相关推荐