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

时间:2010-11-02 11:52:42

标签: python linux unit-testing regression

我需要扩展一个具有大量硬编码路径的python代码 为了不弄乱所有内容,我想在修改之前为代码创建单元测试:它将作为我的新代码的非回归测试(不具有硬编码路径)

但由于硬编码的系统路径,我将在chroot树中运行我的测试(我不想污染我的系统目录)
我的问题是我想只为测试设置chroot,这可以用os.chroot只用root权限来完成(我不想以root身份运行测试脚本)

实际上,我只需要一个伪树指针,这样当open('/etc/resolv.conf)检索假的resolv.conf而不是我的系统的代码时

我显然不想在代码中替换自己的硬编码路径,因为它不会是真正的回归测试

你知道如何实现这个目标吗?

由于

请注意,所有访问的路径都可以通过用户accout

读取

2 个答案:

答案 0 :(得分:5)

在您的测试设置中,您可以覆盖正在使用您自己的版本测试的模块中的内置open,该版本从您的“假”目录结构中读取:

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

答案 1 :(得分:0)

您可以使用setuid root的帮助应用程序来运行chroot;这样可以避免以root身份运行测试。当然,这可能仍然会打开本地root漏洞,所以只能采取适当的预防措施(例如在VM映像中)。

无论如何,任何具有chroot的解决方案都具有固有的平台依赖性,因此它相当尴尬。我实际上更喜欢Dave Webb的想法(更好地覆盖open),我必须承认......