Должен ли Mock <SomeClassType>.SetupAllProperties () заставлять свойства возвращать назначенные им значения? - PullRequest
2 голосов
/ 29 сентября 2010

Когда я использую SetupAllProperties на макете, он работает, как и ожидалось:

/// <summary>
/// demos SetupAllProprties on an interface.  This seems to work fine.
/// </summary>
[Test]
public void Demo_SetupAllProperties_forAnInterface()
{
    var mock = new Mock<IAddress>();

    mock.SetupAllProperties();
    var stub = mock.Object;
    stub.City = "blahsville";

    var retrievedCity = stub.City;
    Assert.AreEqual("blahsville", retrievedCity);
}

Однако, когда я пробую его в классе, происходит сбой:

/// <summary>
/// demos SetupAllProprties on a class.  This seems to work fine for mocking interfaces, but not classes.  :(  The Get accessor returns null even after setting a property.
/// </summary>
[Test]
public void Demo_SetupAllProperties_forAClass()
{
    var mock = new Mock<Address>();

    mock.SetupAllProperties();
    var stub = mock.Object;
    stub.City = "blahsville";

    var retrievedCity = stub.City;
    Assert.AreEqual("blahsville", retrievedCity);
}

Сделал ли ячто-то не так?Пытаюсь ли я сделать что-то неподдерживаемое moq? ​​

В качестве примера приведем интерфейс IAddress и класс Address:

public interface IAddress
{
    string City { get; set; }
    string State { get; set; }
    void SomeMethod(string arg1, string arg2);
    string GetFormattedAddress();
}

public class Address : IAddress
{
    #region IAddress Members
    public virtual string City { get; set; }
    public virtual string State { get; set; }
    public virtual string GetFormattedAddress()
    {
        return City + ", " + State;
    }

    public virtual void SomeMethod(string arg1, string arg2)
    {
        // blah!
    }
    #endregion
}

1 Ответ

1 голос
/ 29 сентября 2010

Я скопировал ваш код в новый проект и не смог воспроизвести вашу проблему. Я установил точку останова в Demo_SetupAllProperties_forAClass() в строке Assert.AreEqual, а retrievedCity имел значение "blahsville".

Я использую xUnit, но не думаю, что это что-то изменит. Какую версию Moq вы используете? Я использую 4.0.10510.6.

...