2

クラスの偽造に問題があります:

クラス A にはメソッドがあります。

protected virtual int method(int argument)
{
    implementation
    return int;
}

クラス B はクラス A を拡張し、メソッドをオーバーライドします。

protected override int method(int argument)
{
      int result = base.method(argument);
      implementation
      return result + 1;
}

クラス B をモックしてmethod関数をテストする必要があります。base.method(argument)問題は、関数の呼び出しを避ける必要があることです。メソッドの実装をテストし、その関数をモックして int を返すだけです。

FakeItEasyでどうすればできますか? または他のモッキングフレームワーク?

アップデート

問題の解決方法:
関数の作成:

int MethodCaller(int argument)
{
    base.method(argument);
}

クラスBの「メソッド」関数でそれを実行します。MethodCaller 関数をモックするよりも

4

1 に答える 1

0

ヘルパー クラス + もう 1 つのヘルパー メソッドでそれを行うことができますが、私はこの解決策が本当に好きではありません。

public class A
{
    protected virtual int method(int argument)
    {
        return argument;
    }

    public int result(int argument)
    {
      return method(argument);
    }
}

public class B : A
{
    protected override int method(int argument)
    {
        return baseMetod(0) + 1;
    }

    protected virtual int baseMetod(int argument)
    {
      return base.method(argument);
    }
}

public class C : B
{
    protected override int baseMetod(int argument)
    {
      return 5;
    }
}

したがって、テストでは呼び出すことができますnew C().Result(10)

于 2012-08-22T09:35:25.820 に答える