Python 处理硬编码路径的回归测试

Python 处理硬编码路径的回归测试,python,linux,unit-testing,regression,Python,Linux,Unit Testing,Regression,我需要扩展一个有大量硬编码路径的python代码 为了不把一切都搞砸,我想在修改之前为代码创建单元测试:它将作为新代码的非回归测试(不会有硬编码路径) 但是由于硬编码的系统路径,我将在chroot树中运行测试(我不想污染我的系统目录) 我的问题是,我只想为测试设置chroot,而这只能通过具有root权限的os.chroot来完成(我不想以root身份运行测试脚本) 事实上,我只需要一个假的树目录,这样当打开('/etc/resolv.conf)的代码检索一个假的resolv.conf而不是我的

我需要扩展一个有大量硬编码路径的python代码
为了不把一切都搞砸,我想在修改之前为代码创建单元测试:它将作为新代码的非回归测试(不会有硬编码路径)

但是由于硬编码的系统路径,我将在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的解决方案本质上都依赖于平台,因此这相当尴尬。实际上,我更喜欢戴夫·韦伯(override
open
)的想法,我必须承认…

谢谢,这正是我所需要的