Могу ли я установить ожидания для типов родинок, созданных с помощью родинок? - PullRequest
4 голосов
/ 18 мая 2011

Мне нужно не только поменять местами реализацию, но и добавить необходимую проверку, чтобы убедиться, что определенные методы были вызваны в правильном порядке.Я могу представить, что что-то вроде Mole + Mock дало бы мне такую ​​возможность.Кто-нибудь знает, есть ли у Moles эта функция?

Этот код должен быть полезным:

// 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();
};

1 Ответ

4 голосов
/ 19 мая 2011

Кроты стремятся дать заглушки не издевается ) для всего, даже для статических или закрытых методов.В руководстве 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 Telerik (новый параллельный, также не бесплатный) включает функции насмешки для всего.
Если у вас есть некоторые интерфейсы, делегаты и виртуальный метод, используйте бесплатную среду для моделирования, такую ​​как Moq или RhinoMocks.

Предупреждение о моем примере: до сих пор я не нашел, как вызвать оригинальный конструктор, я имею в виду что-то вроде

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

На самом деле, из того, что я читал в msdn, это не так.возможно ... я надеюсь, что следующие выпуски позволят это.

...