Autofixture: Question : configurer des simulations de dépendances imbriquées avec AutoMoqCustomization

Créé le 15 avr. 2016  ·  5Commentaires  ·  Source: AutoFixture/AutoFixture

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

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 projecteur

Il y a deux limites. Il ne s'installe pas :

  • méthodes avec des paramètres ref
  • méthodes génériques

Plus d'informations en bas de l'aide-mémoire .

Tous les 5 commentaires

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 :

  • méthodes avec des paramètres ref
  • méthodes génériques

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

Cette page vous a été utile?
0 / 5 - 0 notes