私は Java 開発者で、Ruby をいじっていて、Ruby を愛しています。Ruby のメタプログラミング機能のおかげで、単体テストがよりクリーンになり、面倒なモック フレームワークが必要ないことがわかりました。クラスのサービスを必要とするFile
クラスがあり、テストでは実際のファイルシステムに触れたくありません。Java では、偽のオブジェクトを渡すための「継ぎ目」を簡単にするために仮想ファイル システムを使用しますが、Ruby では明らかにやり過ぎです。私が思いついたことは、Java の世界と比べてすでに本当に素晴らしいように思えます。テスト中のクラスには、オプションのコンストラクターパラメーターがあります。
def initialize(file_class=File)
クラス内でファイルを開く必要がある場合は、次のようにします。
@file_class.open(filename)
そして、呼び出しは実際のファイルクラスに行くか、私の単体テストの場合は、ファイルシステムに触れない偽のクラスに行きます。メタプログラミングでこれを行うためのより良い方法があるに違いないことを私は知っていますか?