我正在为办公室里其他人写的代码写一些单元测试。Python不是我最擅长的语言。虽然我已经成功地完成了基本单元测试,但是python中的mocking让我陷入了一个循环。在
我需要做的是重写对ConfigObj的调用,并将我自己的模拟config/fixture注入到任何ConfigObj调用中。在
在设置.py在
from configobj import ConfigObj
config = ConfigObj('/etc/myapp/config')
在实用工具.py在
^{pr2}$我想做的是,在我的单元测试中实用工具.py,对ConfigObj或设置.py本身。在
许多mocking库希望我模仿自己的类,但是在这个应用程序中,它没有任何显式的类。在
可以这样做吗?还是python名称空间的限制太严格,以至于我无法干预要导入的模块本身是什么?在
旁注:运行2.7,所以我不能做我从2.5中读到的任何技巧。在
如果测试在来自
settings.py
和utils.py
的单独文件中,则可以创建一个文件mock.py
然后}。如果需要统一的全局模拟,请在导入
import mock
,然后导入(从)任何本身导入的模块settings
。这将确保使用MockConfigObj
创建{configobj
的任何文件之前导入它。在这是因为python将
configobj
存储在sys.modules
中,并在实际读取后续导入的文件之前进行检查。在mock.py
中,标识符ConfigObj
只是对sys.modules
中条目的引用,因此您所做的任何更改都将是全局可见的。在这让我觉得有点老套,但这是我能想到的最好的。在
Python名称空间在同一范围内根本不严格。只需重写包含对象(或类本身并提供它)的变量名,在您期望的原始范围内就足够了。在
现在,你要替换它的行为是否相同取决于你。。。在
你不能用另一个重写原来的函数吗?在
Python中没有常量,您可以更改所有内容,甚至可以执行
True = False
。在相关问题 更多 >
编程相关推荐