FakeFSが、私のテストが混乱する可能性のあるファイルシステムサンドボックスを偽造できることを発見したことを非常にうれしく思います。ここで、FileUtils.chownおよびchmodの操作をテストできるようにしたいので、テストコンテキストで偽のユーザーと連携し、オペレーティングシステムのユーザーデータベースに自分のものを結び付けて、完全に移植可能な個別のテストを実行したいと考えています。
私はrspecでテストを行います。
それを行うための最良の方法は何でしょうか?
これを行うには、非常に簡単な方法がありますFileUtils::DryRun
。これは と同じように機能するモジュールですがFileUtils
、まさにこのようなシナリオではファイルシステムに対して実際には何もしません。
を置き換える必要がある場合はFileUtils
、実行するだけですFileUtils = FileUtils::DryRun
質問がよくわからないのですが、FileUtils 呼び出しの「実際の」結果、つまりファイルのパーミッションと所有権の変更をテストしたいのではないかと思います。そのため、ある種のユーザーが必要です。「SELECTは壊れていない」ので、私はそれをしません: http://pragmatictips.com/26
代わりに、次のことを想定してください: FileUtils.chown とその仲間を正しいパラメーターで呼び出すと、正しいことを実行します。アプリケーションが正しいパラメーターを FileUtils に渡すようにするには、モックを使用します。例を次に示します: https://gist.github.com/phillipoertel/5020102
テストを実装にあまり密接に結び付けたくない場合 (モックはクラスで内部で何が起こっているかを知っています)、変更されたアクセス許可をその効果を期待してテストできます。例: @user が以前に @file へのアクセスを許可されていなかった場合は、アクセス許可を変更するメソッドを呼び出してから、変更されたアクセス許可を必要とするメソッドの 1 つを呼び出し、それが機能することをアサートします。しかし、このアプローチではファイルシステムにアクセスすることになりますが、これはそもそも望んでいませんでした。