Question

J'utilise l'agrégateur d'événements de la Composite Application Library et souhaite créer un se moque de l'interface IEventAggregator , à utiliser dans mon test unitaire.

Je prévois d'utiliser Moq pour cette tâche, ainsi qu'un exemple de test afin loin ressemble à quelque chose comme ça:

var mockEventAggregator = new Mock<IEventAggregator>();
var mockImportantEvent = new Mock<ImportantEvent>();
mockEventAggregator.Setup(e => e.GetEvent<SomeOtherEvent>()).Returns(new Mock<SomeOtherEvent>().Object);
mockEventAggregator.Setup(e => e.GetEvent<SomeThirdEvent>()).Returns(new Mock<SomeThirdEvent>().Object);
// ...
mockEventAggregator.Setup(e => e.GetEvent<ImportantEvent>()).Returns(mockImportantEvent.Object);

mockImportantEvent.Setup(e => e.Publish(It.IsAny<ImportantEventArgs>()));

// ...Actual test...

mockImportantEvent.VerifyAll();

Cela fonctionne bien, mais j'aimerais savoir s'il existe un moyen astucieux d'éviter de définir un modèle vide pour chaque type d'événement que mon code pourrait rencontrer (SomeOtherEvent, SomeThirdEvent, ...)? Je pourrais bien sûr définir tous mes événements de cette manière avec une méthode [TestInitialize], mais je voudrais savoir s’il existe un moyen plus intelligent? : -)

Était-ce utile?

La solution

J'ai trouvé la solution pour celui-ci:

var mockEventAggregator = new Mock<IEventAggregator>{ DefaultValue = DefaultValue.Mock };

obligera le mockEventAggregator à revenir en mode mock pour tous les objets imbriqués.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top