2010-09-29 27 views
2

Lorsque j'utilise SetupAllProperties sur une maquette, il fonctionne comme prévu:Should Mock <SomeClassType> .SetupAllProperties() provoque des propriétés pour renvoyer les valeurs qui leur sont affectées?

/// <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); 
} 

Cependant, quand je l'essayer sur une classe, il échoue:

/// <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); 
} 

Est-ce que je fais quelque chose de mal? Est-ce que j'essaie de faire quelque chose qui n'est pas supporté par moq?

Pour faire bonne mesure, voici l'interface iAddress et la classe Adresse:

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 
} 

Répondre

1

Je copiais votre code dans un nouveau projet ne pouvait pas reproduire votre problème. J'ai mis un point d'arrêt dans Demo_SetupAllProperties_forAClass() à la ligne Assert.AreEqual et retrievedCity avait la valeur "blahsville". J'utilise xUnit, mais je ne pense pas que cela ferait une différence. Quelle version de Moq utilisez-vous? J'utilise 4.0.10510.6.

+0

J'utilise 3.1.0.0. Je vais vérifier la liste des problèmes, etc. – apollodude217

+1

Cela doit être une différence de version. Passer à 4.1.10827 (le dernier disponible sur leur page de téléchargement pour le moment) efface le test. :) – apollodude217