起订量检查是否使用来自另一个调用的参数调用方法

Alw*_*ing 5 c# moq

我有以下功能,我试图将其置于单元测试之下

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)

Pet*_*erE 0

第一步是设置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)