単体テストと統合テスト
コードを投稿していないので、いくつかの仮定を立てる必要があります。一般に、Ruby のコア ライブラリまたは標準ライブラリから動作を実行するのは時間の無駄です。さらに、テストでは、必ずしもクラス内のすべてのメソッドではなく、クラスの動作を定義するメソッドを実行する必要があります。
境界を越えて I/O をテストするときは、多くの場合、統合テストを行っています。統合テストが必要な場合もありますが、単体テストと比較すると非常に小さなサブセットを作成する必要があります。
とはいえ、ファイルシステム、データベース、またはネットワーク I/O を含む統合テストは単体テストよりも遅いことがよくありますが、スタブ、モック、またはテスト固有の回避策を保証するのに十分遅いかどうかは、あなたのコードベース。
テストのオプション
本当にこれを行う必要がある場合は、多くのオプションがあります。これらのオプションには次のものがあります。
- ファイルシステム I/O に RAM ディスクを使用する。
- IO、File、または FileUtils へのスタブ呼び出し。
- ファイルフィクスチャを使用して問題を回避します。
- StringIO フィクスチャを使用して問題を回避します。
- File オブジェクトに加えて String や StringIO を受け入れるように、テスト対象のクラスを書き直します。
- FakeFSのような宝石を使用して、スタブ/モックを処理します。
これは、標準的に網羅的なリストを意図したものではありません。他にもオプションがあることは間違いありませんが、上記の 1 つ以上で一般的なユース ケースを処理する必要があります。