【发布时间】:2015-04-28 17:11:06
【问题描述】:
我有一个看起来像这样的包:
lcl
|
| - lcl
| - LCL.py
| - lunabuild.py
在 lunabuild 模块中,有一个 Lunabuild 类。 Lunabuild 类有一个 Lunabuild.configure_jobs() 方法。 LCL 类导入 lunabuild:
from lcl import lunabuild
然后将其用作延迟实例化的属性:
@property
def luna_build(self):
self._luna_build = lunabuild.Lunabuild()
LCL 类有一个运行 Lunabuild.configure_jobs() 方法的 main() 方法:
main(self)
try:
self.luna_build.configure_jobs()
except ValidationError:
...
except Exception, e:
return_code = 2
self.logger_exception(e)
我正在尝试修补 configure_jobs 以具有引发错误的副作用,以便我可以测试是否按预期记录了未知错误。
我一直无法弄清楚where to patch。它一直告诉我它无法识别该属性,或者 lunabuild 没有 configure_jobs 属性。
我尝试了很多不同的选项。在附加调试器的情况下运行,我可以看到以下代码中的 test_lcl 是一个 lcl.lunabuild.Lunabuild 对象
更新: 我最近的尝试是
with patch.object('lcl.lunabuild.Lunabuild', 'configure_jobs') as mock:
mock.side_effect = OSError(2, 'message')
retcode = test_lcl.main()
self.assertEquals(retcode, 2)
【问题讨论】:
-
向我们展示您现在如何修补它以及如何导入该属性 - 后者对于找出修补位置非常重要。
-
将信息添加到主目录。
-
谢谢你,这增加了一些谜题。最后一点:您说
Lunabuild存在于该文件结构中。你在哪里调用它?是否在同一个模块中?
标签: python unit-testing python-mock