0

私はこのようなインターフェースを持っています:

public interface IConfigManager {
    T GetSetting<T>();
}

テストプロジェクトで、上記のdllにfakeを追加しましたが、fakeメソッドを書くことができません。生成されたコードを開くと、次のようになります。

public class StubIConfigManager : StubBase<IConfigManager>, IConfigManager
{
    // Summary:
    //     Sets stubs of GetSetting()
    public void GetSettingOf1<T>(FakesDelegates.Func<T> stub);
}

GetSettingOf1デリゲートとして定義されていないため、ラムダ式を使用して偽造できます。どうすれば偽装できますか?

4

1 に答える 1

2

メソッドはジェネリックであるため、単一のデリゲートでは十分ではありません。Func<string>1 つのデリゲートを と の両方にすることはできませんFunc<int>。あなたが見ているメソッドでは、特定の型のデリゲートを渡すことができます。これはおそらく内部的に辞書に格納されています (Fakes のスタブ動作を複製しようとする私の試みから)。

したがって、通常はプロパティに割り当てるデリゲートをメソッドに渡すだけですGetSettingOf1。これは、ジェネリック メソッドが 1 つだけではなく、任意の数の型のスタブ実装を持つことを許可する方法にすぎません。

例:

var configManager = new StubIConfigManager();
configManager.GetSettingOf1(() => "TestString");
configManager.GetSettingOf1(() => 23);

var stringResult = configManager.GetSetting<string>();
var intResult = configManager.GetSetting<int>();

Assert.AreEqual("TestString", stringResult);
Assert.AreEqual(23, intResult);

Fakes が機能するため、明らかにこの例は記述すべきテストではありませんが、要点は理解できるはずです。

于 2014-04-01T14:31:27.713 に答える