Как выразить временную корреляцию двух пробных звонков Rhino? - PullRequest
0 голосов
/ 26 января 2012

У меня есть устройство, которое нужно поиздеваться.В зависимости от последнего установленного значения флаг состояния на устройстве изменяется.Мне нужно смоделировать это поведение.

Вот некоторый псевдокод, который не работает:

private delegate void setvalue(Value val);
...
Value lower = new Value(1);
Value higher = new Value(7);
ISweetInterface mock = setupSweetInterface();
Boolean flagreturn = false;
mock.Expect(x => x.Lower).Return(lower);
mock.Expect(x => x.SetValue(lower))
    .Do(new setvalue(delegate(Value val) { flagreturn = true; }));
mock.Expect(x => x.SetValue(higher))
    .Do(new setvalue(delegate(Value val) { flagreturn = false; }));

mock.Expect(x => x.CheckFlag()).Return(flagreturn);

Mockuser tested = new Mockuser(mock)
Assert.IsTrue(tested.setLowerAndCheckFlag());
Assert.IsFalse(tested.setHigherAndCheckFlag());

В зависимости от последнего установленного значения флаг на устройстве должен измениться.Я думаю, что мой делегат на самом деле не может видеть возврат.Код, который я написал, компилируется, но CheckFlag () всегда возвращает false.

Как правильно выразить это связанное поведение.

1 Ответ

0 голосов
/ 27 января 2012

Я заставил его работать с помощью другого объекта, который следит за мной. Одним из краеугольных камней является вызов нового объекта с помощью DO, а не просто попытка вернуть одно из его свойств.

Вот некоторый псевдокод для иллюстрации:

    private class mockdevice
    {
        public List<Value> listOfTrueReturn = new List<Value>();
        private Boolean flagvalue = false;
        public bool flag()
        {
                return flagvalue;
        }
        public void setvalue(Value val)
        {
            if (listOfTrueReturn.Contains(val))
            {
                flagvalue = true;
            }
            else
            {
                flagvalue = false;
            }
        }
    }


    private delegate void setvalue(Value val);
    private delegate Boolean getflag();

    [Test]
    public void shouldAnswerStackoverflowQuestion()
    {
        float d = 5f;
        Value lower = new Value(-d, 0f, unit);
        Value higher = new Value(d, 0f, unit);
        mockdevice md = new mockdevice();
        md.listOfTrueReturn.Add(higher);

        IFindFlagDataObject mock = setupmock();
        mock.Expect(x => x.Lower).Return(lower);
        mock.Expect(x => x.Higher).Return(higher);
        mock.Expect(x => x.CheckFlag()).Do(new getflag(md.flag)).Repeat.Times(2);
        mock.Expect(x => x.SetValue(Arg<Value>.Is.Anything)).Do(new setvalue(md.setvalue)).Repeat.Times(2);

        FindFlagStrategy tested = new FindFlagStrategy(mock);
        tested.FindFlagValue();

        mock.VerifyAllExpectations();
        Mockuser tested = new Mockuser(mock)
        Assert.IsTrue(tested.setLowerAndCheckFlag());
        Assert.IsFalse(tested.setHigherAndCheckFlag());
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...