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();
}
Tôi đang bắt đầu sử dụng Moq và gặp khó khăn một chút. Tôi đang cố gắng xác minh rằng messageServiceClient đang nhận đúng tham số, là một XmlElement, nhưng tôi không thể tìm thấy bất kỳ cách nào để làm cho nó hoạt động. Nó chỉ hoạt động khi tôi không kiểm tra một giá trị cụ thể.Xác minh thông số cụ thể bằng Moq
Bất kỳ ý tưởng nào?
Câu trả lời một phần: Tôi đã tìm thấy cách để kiểm tra xem xml được gửi tới proxy có đúng không, nhưng tôi vẫn không nghĩ đó là cách phù hợp để thực hiện.
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());
}
Nhân tiện, làm cách nào tôi có thể trích xuất biểu thức từ cuộc gọi Xác minh?
Một lợi ích lớn cho phương pháp này là nó sẽ cung cấp cho bạn các lỗi kiểm tra cụ thể về cách đối tượng không chính xác (như bạn đang thử nghiệm từng cá nhân). –
Tôi nghĩ rằng tôi là người duy nhất đã làm điều này, vui mừng khi thấy đó là một cách tiếp cận hợp lý! –
Tôi nghĩ rằng việc sử dụng It.Is (validator) theo Mayo là tốt hơn vì nó tránh được cách hơi lúng túng khi lưu giá trị tham số như một phần của lambda –
stevec