1

編集:私はこの例で遊んで、今私の質問は完全に別のものです.

この例を実行すると:

using Rhino.Mocks;

public interface IInterface
{
    decimal GetDecimal();
}

static class Util
{
    public static double? DecToDouble(this IInterface input)
    {
        return (double) input.GetDecimal();
    }
}

class MockExample
{
    public void RunThis()
    {
        var stubReader = MockRepository.GenerateStub<IInterface>();
        stubReader.Stub(sr => sr.DecToDouble()).Return(1.2);
    }
}

次のエラーが表示されます。

System.InvalidOperationException : タイプ 'System.Double' がメソッド 'IInterface.GetDecimal();' の戻り値のタイプ 'System.Decimal' と一致しません

なんで?

4

2 に答える 2

0

モックしようとしている場合IInterfaceは、間違ったメソッドをスタブしています:

public void RunThis()
{
    var stubReader = MockRepository.GenerateStub<IInterface>();
    stubReader.Stub(sr => sr.GetDecimal()).Return(1.2);
}

stub を作成しようとしている場合DecToDouble、RhinoMocks ではできません。拡張メソッドは、コンパイル時にバインドされるため、RhinoMocks でモックできない静的メソッド呼び出しにコンパイルされます。一部のスタブ フレームワークは、低レベルのプロファイラー呼び出しを使用して静的呼び出しをインターセプトしますが、RhinoMocks には、私が知っているその機能がありません。

同様の議論については、この質問を参照してください。

于 2013-07-15T18:08:54.623 に答える