Python 处理硬编码路径的回归测试
我需要扩展一个有大量硬编码路径的python代码Python 处理硬编码路径的回归测试,python,linux,unit-testing,regression,Python,Linux,Unit Testing,Regression,我需要扩展一个有大量硬编码路径的python代码 为了不把一切都搞砸,我想在修改之前为代码创建单元测试:它将作为新代码的非回归测试(不会有硬编码路径) 但是由于硬编码的系统路径,我将在chroot树中运行测试(我不想污染我的系统目录) 我的问题是,我只想为测试设置chroot,而这只能通过具有root权限的os.chroot来完成(我不想以root身份运行测试脚本) 事实上,我只需要一个假的树目录,这样当打开('/etc/resolv.conf)的代码检索一个假的resolv.conf而不是我的
为了不把一切都搞砸,我想在修改之前为代码创建单元测试:它将作为新代码的非回归测试(不会有硬编码路径) 但是由于硬编码的系统路径,我将在chroot树中运行测试(我不想污染我的系统目录)
我的问题是,我只想为测试设置chroot,而这只能通过具有root权限的os.chroot来完成(我不想以root身份运行测试脚本) 事实上,我只需要一个假的树目录,这样当
打开('/etc/resolv.conf)
的代码检索一个假的resolv.conf而不是我的系统目录时
我显然不想在代码中替换硬编码路径,因为这不是真正的回归测试
你知道如何做到这一点吗
谢谢
请注意,所有访问的路径都可以通过用户帐户读取。在测试设置中,您可以使用您自己的版本覆盖正在测试的模块中的内置
打开,该版本从“伪”目录结构中读取:
import mymod
import os.path
def chroot_open(filename,*args):
filename = os.path.join("/home/you/fakeroot",filename)
return open(filename,*args)
mymod.open = chroot_open
您可以使用setuid root的助手应用程序来运行chroot;这将避免以root用户身份运行测试。当然,这可能仍然会打开本地根攻击,因此只能在采取适当预防措施的情况下进行(例如,在VM映像中)
无论如何,任何使用chroot的解决方案本质上都依赖于平台,因此这相当尴尬。实际上,我更喜欢戴夫·韦伯(overrideopen
)的想法,我必须承认…谢谢,这正是我所需要的