public void SubmitMessagesToQueue_OneMessage_SubmitSuccessfully()
{
var messageServiceClientMock = new Mock<IMessageServiceClient>();
var queueableMessage = CreateSingleQueueableMessage();
var message = queueableMessage[0];
var xml = QueueableMessageAsXml(queueableMessage);
messageServiceClientMock.Setup(proxy => proxy.SubmitMessage(xml)).Verifiable();
//messageServiceClientMock.Setup(proxy => proxy.SubmitMessage(It.IsAny<XmlElement>())).Verifiable();
var serviceProxyFactoryStub = new Mock<IMessageServiceClientFactory>();
serviceProxyFactoryStub.Setup(proxyFactory => proxyFactory.CreateProxy()).Returns(essageServiceClientMock.Object);
var loggerStub = new Mock<ILogger>();
var client = new MessageClient(serviceProxyFactoryStub.Object, loggerStub.Object);
client.SubmitMessagesToQueue(new List<IMessageRequestDTO> {message});
//messageServiceClientMock.Verify(proxy => proxy.SubmitMessage(xml), Times.Once());
messageServiceClientMock.Verify();
}
Sto iniziando a utilizzare Moq e sto faticando un po '. Sto cercando di verificare che messageServiceClient stia ricevendo il parametro giusto, che è un XmlElement, ma non riesco a trovare alcun modo per farlo funzionare. Funziona solo quando non controllo un particolare valore.Verifica di un parametro specifico con Moq
Qualche idea?
Risposta parziale: Ho trovato un modo per verificare che l'xml inviato al proxy sia corretto, ma continuo a non pensare che sia il modo giusto per farlo.
public void SubmitMessagesToQueue_OneMessage_SubmitSuccessfully()
{
var messageServiceClientMock = new Mock<IMessageServiceClient>();
messageServiceClientMock.Setup(proxy => proxy.SubmitMessage(It.IsAny<XmlElement>())).Verifiable();
var serviceProxyFactoryStub = new Mock<IMessageServiceClientFactory>();
serviceProxyFactoryStub.Setup(proxyFactory => proxyFactory.CreateProxy()).Returns(messageServiceClientMock.Object);
var loggerStub = new Mock<ILogger>();
var client = new MessageClient(serviceProxyFactoryStub.Object, loggerStub.Object);
var message = CreateMessage();
client.SubmitMessagesToQueue(new List<IMessageRequestDTO> {message});
messageServiceClientMock.Verify(proxy => proxy.SubmitMessage(It.Is<XmlElement>(xmlElement => XMLDeserializer<QueueableMessage>.Deserialize(xmlElement).Messages.Contains(message))), Times.Once());
}
A proposito, come è possibile estrarre l'espressione dalla chiamata di verifica?
Un grande vantaggio di questo approccio è che ti darà errori di test specifici su come l'oggetto non è corretto (come stai testando singolarmente). –
Pensavo di essere l'unico a farlo, felice di vedere che è un approccio ragionevole! –
Penso che l'utilizzo di It.Is (validatore) come per Mayo sia migliore in quanto evita il modo leggermente imbarazzante di salvare il valore del parametro come parte del lambda –
stevec