Как установить свойство на макете в C # и Rhinomocks? - PullRequest
0 голосов
/ 04 июня 2011

У меня проблемы с установкой значения свойства в Rhinomocks. Мне нужно установить начальное значение свойства вне тестируемого метода, а затем установить его значение внутри тестируемого метода условно. Какой-то код:

public interface IResponse
{
    string ResponseText { get; set; }
}

public void ProcessResponse(IResponse response)
{
    if(response.ResponseText == "Unset")
    {
        response.ResponseText = someService.GetResponse();//someService here is irrelvant to the question
    }
}

[TestMethod]
public void ResponseValueIsSetWhenConditionIsTrueTest()
{
    var mock = Mock<IResponse>.GenerateMock();
    mock.Stub(x => x.ResponseText).Returns("Unset");

    Processor.ProcessResponse(mock);

    Assert.AreEqual("Responseval", mock.ResponseText); //Fails because the method doesn't set the value of the property.
}

Мне нужно, чтобы свойство макета имело начальное значение, входящее в часть теста Act, и позволяю тестируемому методу изменять это значение, чтобы я мог утверждать его позже. Однако mock.ResponseText всегда имеет значение «Unset», и метод никогда не меняет своего значения - что здесь происходит?

Ответы [ 2 ]

13 голосов
/ 04 июня 2011

Вы пробовали PropertyBehavior?Например:

mock.Stub(x => x.ResponseText).PropertyBehavior();

Тогда в вашем тесте:

mock.ResponseText = "Unset";
Processor.ProcessResponse(mock);
Assert.AreEqual("Responseval", mock.ResponseText);
3 голосов
/ 04 июня 2011

Прежде всего, существует разница в поведении между mocks и заглушками в Rhino.Mocks.Во-вторых, я не уверен, какую версию Rhino.Mocks вы используете, но, используя последнюю версию и AAA синтаксис , это, безусловно, работает:

public interface IResponse
{
    string ResponseText { get; set; }
}

...

    [Test]
    public void Test()
    {
        IResponse response = MockRepository.GenerateStub<IResponse>();

        response.ResponseText = "value1";
        Assert.AreEqual("value1", response.ResponseText);

        response.ResponseText = "value2";
        Assert.AreEqual("value2", response.ResponseText);
    }
...