7

私は次のインターフェースを持っています:

public interface IOuputDestination
{
    void Write(String s);
}

私のユニットテストでは、私はそれを次のようにモックします:

var outputDestination = A.Fake<IOutputDestination>();

私がやりたいのは、Writeメソッドをインターセプトして、テストで定義したカスタム実装を使用するようにすることです。このようなもの :

String output = "";
A.CallTo(() => outputDestination.Write(A<String>.Ignored)).Action(s => output += s);
              //Is something like this even possible ? ----^

ここではActionメソッドは存在しませんが、私がやりたいのは、渡されたパラメーターがoutputDestination.Writeカスタムアクションにリダイレクトされることです。これはFakeItEasyを使用して可能ですか?そうでない場合、この種の動作を可能にする別のモックフレームワークはありますか?

4

2 に答える 2

8

次の方法でその動作を取得できますInvokes

String output = "";
A.CallTo(() => outputDestination.Write(A<String>.Ignored))
    .Invokes((string s) => output += s);
于 2012-10-19T19:23:41.693 に答える
0

作成した後は、実際にどのように使用しているかを示すことはできませんoutputDestination。テスト中のメソッドに注入しますか?もしそうなら、偽物を作成する代わりに、実装IOutputDestinationし、必要な実装を含む特別に細工されたクラスを作成するとどうなりWrite()ますか?

これは、偽物で確認する必要のある他の動作(ある場合)によって異なると思います。これ以上の文脈がなければ知るのは難しい。

于 2012-12-27T14:20:31.860 に答える