Pergunta

Eu estou usando o Composite Application Library 's agregador evento, e gostaria de criar uma zombar para o IEventAggregator interface, para uso em meu teste de unidade.

Eu estou pensando em usar Moq para esta tarefa, e um exemplo de teste para agora parece algo como isto:

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();

Esta multa funciona, mas eu gostaria de saber, se há alguma maneira inteligente de evitar ter que definir uma simulação vazia para cada evento do tipo meu código pode encontrar (SomeOtherEvent, SomeThirdEvent, ...)? Eu poderia, naturalmente, definir todos os meus eventos desta forma, em um método [TestInitialize], mas eu gostaria de saber se existe uma maneira mais inteligente? : -)

Foi útil?

Solução

Eu encontrei a solução para este:

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

fará com que as simulações de retorno mockEventAggregator para todos os objetos aninhados.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top