ハードコード化されたパスを扱う回帰テスト
-
28-09-2019 - |
質問
ハードコード化されたパスを十分に備えたPythonコードを拡張する必要があります
すべてを台無しにしないために、変更する前にコードのユニットテストを作成したい:それは私の新しいコードで非回復テストとして機能します(ハードコーディングされたパスはありません)
しかし、ハードコード化されたシステムパスのために、私はクルートツリー内でテストを実行します(私は私のシステム監督を汚染したくありません)
私の問題は、テスト用にのみChrootをセットアップしたいということです。これは、os.chrootでルート特権でのみ実行できます(そして、テストスクリプトをルートとして実行したくありません)
実際、コードがそのときにそれが open('/etc/resolv.conf)
私のシステムではなく、偽のressolv.confを取得します
私は明らかに、コードのハードコード化されたパスを自分自身に置き換えたくありません。 本物 回帰テスト
これを達成する方法はありますか?
ありがとう
アクセスされるすべてのパスはユーザーアクセスで読みやすいことに注意してください
解決
テストのセットアップでは、内蔵をオーバーライドできます 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
他のヒント
setUidルートのヘルパーアプリケーションを使用して、chrootを実行できます。これにより、テストをルートとして実行する必要性が回避されます。もちろん、それはおそらく地元のルートのエクスプロイトをまだ開くでしょうので、適切な予防措置でのみ行う必要があります(たとえば、VM画像)。
とにかく、Chrootを使用したソリューションは本質的にプラットフォームに依存しているため、かなり厄介です。私は実際にデイブ・ウェッブのアイデアが好きです(オーバーライド open
)より良い、私は認めなければならない...