J'ai essayé d'utiliser le AutoMoqCustomization
pour simuler automatiquement un graphique d'objets avec des dépendances imbriquées et les résultats ne sont pas ceux que j'attendais. Voici le code de test, quelqu'un peut-il me dire pourquoi, après avoir gelé un Mock<IObject>
il y a une situation où un autre IObject
créé par Moq est créé par le projecteur ?
[TestClass]
public class MyTestClass
{
[TestMethod]
public void Test()
{
var fixture = new Fixture().Customize(new AutoMoqCustomization());
var objMock = fixture.Freeze<Mock<IObject>>();
var sut = fixture.Create<Dependant2>();
sut.Obj.Should().BeSameAs(objMock);
}
}
public interface IObject { }
public interface IDependant { IObject Obj { get; } }
public class MyObject : IObject { }
public class Dependant2
{
public Dependant2(IDependant dependant)
{
Obj = dependant.Obj;
}
public IObject Obj { get; }
}
Le AutoMoqCustomization
crée des objets fictifs mais ne les configure pas.
Si vous souhaitez que les membres de la simulation soient configurés, envisagez d'utiliser le AutoConfiguredMoqCustomization
place. Cela va a) définir les propriétés réglables publiques de la maquette et b) les méthodes/indexeurs de configuration pour renvoyer (et mémoriser) les valeurs générées paresseusement par le projecteur
Il y a deux limites. Il ne s'installe pas :
ref
Plus d'informations en bas de l'aide-mémoire .
Merci pour la réponse rapide ! J'ai essayé AutoConfiguredMoqCustomization
avec la méthode au lieu de la propriété dans IDependant
et cela a respecté l'instance gelée. Existe-t-il un moyen de faire en sorte que les propriétés non réglables soient également respectées? Avec Moq, on peut configurer un getter de propriété même s'il n'y a pas de setter.
En fait, tant pis. Il configure également les propriétés get-only, mon mauvais.
Je me souviens également d'un bogue dans Moq qui interférait avec AutoMoq, le rendant incapable de configurer les propriétés get-only. Au moins à l'époque où j'ai examiné cela, vous deviez utiliser la version Moq 4.2.1409.1722 ou inférieure (détails au n° 434). Peut-être que le bogue a été corrigé dans la nouvelle version de Moq, je ne suis pas sûr.
J'ai essayé la version Moq la plus élevée qui est inférieure à 4.2.1409.1722 et vous avez raison, cela fonctionne également pour les propriétés get-only. Le bogue Moq n'a pas été corrigé dans une version plus récente, puisque je l'ai essayé avec la dernière version. Merci beaucoup pour votre aide
Commentaire le plus utile
Le
AutoMoqCustomization
crée des objets fictifs mais ne les configure pas.Si vous souhaitez que les membres de la simulation soient configurés, envisagez d'utiliser le
AutoConfiguredMoqCustomization
place. Cela va a) définir les propriétés réglables publiques de la maquette et b) les méthodes/indexeurs de configuration pour renvoyer (et mémoriser) les valeurs générées paresseusement par le projecteurIl y a deux limites. Il ne s'installe pas :
ref
Plus d'informations en bas de l'aide-mémoire .