4

Rhino Mocks を使用して静的拡張メソッドをスタブできますが、戻り値を別の型にキャストするとエラーが発生します。なんで?

using Rhino.Mocks;

public interface INumberGenerator
{
    double GetDouble();
}

static class NumberGeneratorExtensionMethods
{
    public static double GetTheDouble(this INumberGenerator input)
    {
        return input.GetDouble();
    }

    public static decimal GetTheDoubleCastToDecimal(this INumberGenerator input)
    {
        return (decimal) input.GetDouble();
    }
}

class MockExample
{
    public void TriggerTheError()
    {
        var stub = MockRepository.GenerateStub<INumberGenerator>();

        // This works
        stub.Stub(obj => obj.GetTheDouble()).Return(1.2d);

        // This throws the error
        stub.Stub(obj => obj.GetTheDoubleCastToDecimal()).Return(1.2m);
    }
}

エラーは次のとおりです。

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

4

2 に答える 2

1

フレームワークなしで拡張メソッドまたはその他の静的メソッドをスタブ化する可能性があります。これには、少し追加の余裕が必要です。

public static class MyExtensions
{
    public static Func<int,int, int> _doSumm = (x, y) => x + y;

    public static int Summ(this int x, int y)
    {
        return _doSumm(x, y);
    }
}

これにより、実装を置き換えることができます。_doSummフィールドの値を変更するだけです。

于 2015-01-30T08:28:56.513 に答える