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();
}
Zaczynam używać Moq i nieco się z tym zmagam. Próbuję sprawdzić, czy messageServiceClient otrzymuje właściwy parametr, który jest XmlElement, ale nie mogę znaleźć żadnego sposobu, aby to działało. Działa tylko wtedy, gdy nie sprawdzam konkretnej wartości.Sprawdzanie określonego parametru za pomocą Moq
Wszelkie pomysły?
Częściowa odpowiedź: Znalazłem sposób na sprawdzenie, czy xml wysłany do proxy jest poprawny, ale nadal nie sądzę, że jest to właściwy sposób.
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());
}
Nawiasem mówiąc, w jaki sposób mogę wyodrębnić wyrażenie z połączenia Verify?
Jedną dużą korzyścią dla tego podejścia jest to, że da ci konkretne niepowodzenia testowania, jak obiekt jest niepoprawny (jak testujesz każdy indywidualnie). –
Myślałem, że jestem jedynym, który to zrobił, zadowolony, że to rozsądne podejście! –
Myślę, że używanie It.Is (walidatora) jak na Mayo jest lepsze, ponieważ pozwala uniknąć nieco niezręcznego sposobu zapisywania wartości parametru jako części lambda –
stevec