我有以下功能,我试图将其置于单元测试之下
public MessageListDto GetMessageList(SimpleSearchCriteria criteria)
{
var messages = _repository.GetMessages(criteria, out int total);
return new MessageListDto(messages, total);
}
Run Code Online (Sandbox Code Playgroud)
以下是迄今为止我的测试,在其中我能够确定_repository.GetMessages使用正确的参数进行调用。
但是,如何测试第二行是否已正确测试,我需要测试
MessageListDto使用上面一行返回的两个参数构造一个新的类型对象[Test]
public void Test1()
{
int total = 10;
var searchCriteria = new SimpleSearchCriteria();
var mockRepo = new Mock<IMessageRepository>();
var messageService = new MessageService(mockRepo.Object);
messageService.GetMessageList(searchCriteria);
mockRepo.Verify(r => r.GetMessages(searchCriteria, out total), Times.Once);
mockRepo.Verity ??????????
}
Run Code Online (Sandbox Code Playgroud)
第一步是设置MessageService模拟,以便它返回确定性的内容,然后在第二步中验证它是否已用于构建您的MessageListDto.
[Test]
public void Test1()
{
// arrange
int total = 10;
var searchCriteria = new SimpleSearchCriteria();
var messages = new [] {"message1", "message2"} // or similar
var mockRepo = new Mock<IMessageRepository>();
// or similar, I am not quite certain as to the specific syntax. Especially wrt. out parameters. Check the documentation.
mockRepo.Setup(x => x.GetMessages(It.IsAny<SimpleSearchCriteria>(), It.IsAny<int>())).Returns(messages);
var messageService = new MessageService(mockRepo.Object);
// act
var result = messageService.GetMessageList(searchCriteria);
// assert
mockRepo.Verify(r => r.GetMessages(searchCriteria, out total), Times.Once);
// or similar; here you might want to check out FluentAssertions as @Peter Csala suggested
Assert.Equal(result.Messages, messages);
}
Run Code Online (Sandbox Code Playgroud)