Заглушете поведението на свойство ReadOnly

public interface ICell
        {
            int Value{get;}

            void IncrementValue();
        }

Искам да създам мъниче за този интерфейс в RhinoMocks. Имам свойство само за четене и искам да увеличавам неговата стойност всеки път, когато извикам метода IncrementValue(). Това възможно ли е? Не искам да създавам нов клас за този мъниче.


person Martín Caballero    schedule 08.01.2011    source източник


Отговори (3)


Имам подобно предложение на Джей, само по-кратко. Не съм сигурен дали това има някои недостатъци.

   int count = 0;

    var mock = MockRepository.GenerateStub<ICell>();
    mock.Stub(p => p.Value).WhenCalled(a => a.ReturnValue = count).Return(42);
    mock.Stub(p => p.IncrementValue()).WhenCalled(a => {
        count = (int)count+1; 
    });

Return(42) се поставя там, за да каже „Стойността връща нещо, не хвърляйте“ и WhenCalled(a => a.ReturnValue = count) заменя тази връщаща стойност 42 с текущата стойност на броя.

person Alexei Levenkov    schedule 08.01.2011

Можете да дадете на rhino mocks ламбда, която да се изпълнява, когато се извика функция get. След това тази ламбда може да увеличи брояч. Можете да намерите пример тук

person SwDevMan81    schedule 08.01.2011
comment
Предполагам, че проблемът на Мартин е какво да се увеличи... интерфейсът има само get-property, без набор - person Pauli Østerø; 08.01.2011

Измислих и това:

cell.Stub(c => c.Value).WhenCalled(m => m.ReturnValue = cell.GetArgumentsForCallsMadeOn(c => c.IncrementValue()).Count).Return(0);

Преди вашата помощ бях объркан с поведението на метода WhenCalled... но мисля, че вашият подход е по-добър от този

person mpccolorado    schedule 08.01.2011