Порядок возвращаемых значений метода с заглушками Rhino-Mock

Я начал экспериментировать с Rhino-Mocks (3.6), когда читал Роя Ошерова Искусство модульного тестирования . У него есть пример, демонстрирующий, что имитирующий метод может быть написан так, чтобы возвращать разные результаты при двойном вызове с одним и тем же параметром:

   [Test]
    public void ReturnResultsFromMock()
    {
        MockRepository repository = new MockRepository();
        IGetRestuls resultGetter = repository.DynamicMock();
        using(repository.Record())
        {
            resultGetter.GetSomeNumber("a");
            LastCall.Return(1);

            resultGetter.GetSomeNumber("a");
            LastCall.Return(2);

            resultGetter.GetSomeNumber("b");
            LastCall.Return(3);

        }

        int result = resultGetter.GetSomeNumber("b");
        Assert.AreEqual(3, result);

        int result2 = resultGetter.GetSomeNumber("a");
        Assert.AreEqual(1, result2);

        int result3 = resultGetter.GetSomeNumber("a");
        Assert.AreEqual(2, result3);
    }

Это прекрасно работает. Но когда я пробую то же самое с заглушкой, и метод, который принимает и возвращает строку, я не могу сгенерировать второе возвращаемое значение:

    [Test]
    public void StubMethodWithStringParameter_ScriptTwoResponses_SameResponseReceived()
    {
        MockRepository mocks = new MockRepository();
        IMessageProvider stub = mocks.Stub();

        using (mocks.Record())
        {
            stub.GetMessageForValue("a");
            LastCall.Return("First call");
            stub.GetMessageForValue("a");
            LastCall.Return("Second call");
        }

        Assert.AreEqual("First call", stub.GetMessageForValue("a"));
        Assert.AreEqual("Second call", stub.GetMessageForValue("a"));
    }
}

public interface IMessageProvider
{
    string GetMessage();
    string GetMessageForValue(string value);
}

Этот тест завершился неудачно, потому что «Первый вызов» получен для обоих вызовов. Я пробовал несколько морщин синтаксиса (используя mocks.Ordered (), SetResult, Expect и т. Д.), Но мне все еще не удалось получить второй результат.

Я что-то делаю не так, или это ограничение Rhino-Mocks? Я проверил это сообщение в блоге , но предложенный синтаксис не решил мою проблему.

9
задан Dan Solovay 10 April 2011 в 03:30
поделиться