【问题标题】:regression test dealing with hard coded path处理硬编码路径的回归测试
【发布时间】:2011-05-03 21:40:32
【问题描述】:

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

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

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

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

您知道如何实现这一目标吗?

谢谢

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

【问题讨论】:

    标签: python linux unit-testing regression


    【解决方案1】:

    在您的测试设置中,您可以使用从“假”目录结构中读取的您自己的版本来覆盖您正在测试的模块中的内置 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
    

    【讨论】:

    • 谢谢,这正是我所需要的
    【解决方案2】:

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

    无论如何,任何带有 chroot 的解决方案本质上都是依赖于平台的,所以它相当尴尬。我实际上更喜欢 Dave Webb (override open) 的想法,我必须承认......

    【讨论】:

      猜你喜欢
      • 2011-01-07
      • 2014-06-30
      • 1970-01-01
      • 2016-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多