2010-09-29 6 views
2

Когда я использую SetupAllProperties на макете, он работает, как ожидалось:Должен ли Mock <SomeClassType> .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 и класс Адреса:

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

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

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

+0

Я использую 3.1.0.0. Я проверю список проблем и т. Д. – apollodude217

+1

Это должна быть разница в версии. Переключение на 4.1.10827 (последнее из доступных на их странице загрузки сейчас) очищает тест. :) – apollodude217