5

私は多くのジェネリックメソッドとのインターフェースを持っています。これらのメソッドは、渡されたデータのタイプに基づいて操作を実行します。これを NSubstitute でモックするにはどうすればよいですか? 現時点では、メソッドが呼び出される可能性のあるすべての型を処理できないため、モックの代わりに具体的なクラスを使用する必要がありました。

public interface IInstanceSource
{
    bool CanCreate<T>();
    T Create<T>();
    void Register<T>(Func<T> creator);
}

    public static IInstanceSource GetInstanceSource()
    {
        var _data = new Dictionary<Type, Func<object>>();
        var a = Substitute.For<IInstanceSource>();
        //code below fails since T is not defined. How do I make the code below accept any type?
        a.WhenForAnyArgs(x=>x.Register(Arg.Any<Func<T>>)).Do(x=> { /* todo */});
        a.CanCreate<T>().Returns(x => _data[typeof (T)]);
        return a;
    }

ありがとう。

4

1 に答える 1

5

NSubstitute は、ジェネリック メソッドの複数のインスタンスを自動的に設定することをサポートしていません。

テストで通常IInstanceSource使用される方法は、テスト中のコードの特定のビットに対して構成することですT。単一のフィクスチャがいくつかの異なる で機能する必要がある場合、特定の の構成手順を実行するTようなヘルパー メソッドを使用することで、構成をより簡単にすることができます。ConfigureInstanceSource<T>()T

あなたの場合、のすべての偽のインスタンスに対して固定された動作が必要なようですがIInstanceSource、その場合、独自のテストダブルをハンドコーディングすることで正しい方法で進んでいると思います。

于 2013-07-28T12:31:32.213 に答える