4

実装を交換するだけでなく、特定のメソッドが正しい順序で呼び出されたことを確認するために必要なチェックを追加する必要があります。Mole+Mockのようなものが私にこのオプションを与えると想像することができます。ほくろがこの機能を持っているかどうか誰かが知っていますか?

このコードは役立つはずです:

// Verify if Dispose was called
MDisposableObject.Constructor = delegate(DisposableObject instance)
{
    MDisposableObject mole = new MDisposableObject(instance);
    ...
    // This doesn't work 
    //objectContext.Expects(i => i.Dispose()).ToBeCalledOneTime();
};
4

1 に答える 1

4

Molesは、静的な方法や封印された方法であっても、すべてにスタブモックではない)を提供することを目的としています。Molesのマニュアルには、他のモックフレームワークのようにモックの側面を狙っていないことが書かれています。モックではなく、分離を提供します。あなたがあなたのほくろの呼び出しをチェックしたいなら、あなたはあなた自身の方法をしなければなりません。例えば:

    bool called = false;
    MDisposableObject.Constructor = (@this) =>
    {
        var mole = new MDisposableObject(@this)
        {
            Dispose = () =>
                {
                    Assert.IsFalse(called);
                    called=true;
                    //if you want to call the original implementation:
                    MolesContext.ExecuteWithoutMoles(() => (@this).Dispose());
                    //or do something else, even nothing
                }

        };
    };

Typemock Isolator(強力ですが高価)とJustMock of Telerik(新しい同時、無料ではありません)のみがすべてのモック機能を有効にします。
いくつかのインターフェース、デリゲート、仮想メソッドがある場合は、MoqやRhinoMocksなどの無料のモックフレームワークを使用してください。

私の例についての警告:これまで、元のコンストラクターを呼び出す方法が見つかりませんでした。

var mole = new SDisposable();
(@this) = mole;
new MDisposable(mole) {...};

実際、私がmsdnで読んだことから、それは不可能です...次のリリースがそれを可能にすることを願っています。

于 2011-05-19T07:14:26.883 に答える