0

これが、テストでサードパーティ サービスへの呼び出しを回避するための適切な戦略であるかどうかを知りたいです。

PersonIdentifier と FIleManager と呼ぶサードパーティ サービスへの呼び出しをカプセル化する 2 つのクラスがあります。

これらのクラスをテスト可能にするために、次のように別のクラスのコンストラクターに渡します。

CreateContact.new(current_user, input, PersonIdentifier.new, FileManager.new)

ただし、この CreateContact インスタンスの作成は、クラス メソッドまたはインスタンス メソッドで行われる場合があります。したがって、クラスメソッドの場合、インスタンスを作成する別のクラスメソッドを作成します。

  def self.create_contact(current_user, input)
    CreateContact.new(current_user, input, PersonIdentifier.new, FileManager.new)
  end

次に、私のテストでは、instance_eval を使用してこのメ​​ソッドをオーバーライドします。

  def setup
    super

    EmailIdentifier.instance_eval do
      def create_contact(current_user, input)
        CreateContact.new(current_user, input, TestPersonIdentifier.new, TestFileManager.new)
      end
    end
  end

テスト セットアップに複数の class_eval または instance_eval を追加するのは少し面倒です。

より良い方法はありますか?

4

1 に答える 1