首页 > 解决方案 > 单元测试服务起订量设置不返回值

问题描述

我正在尝试为我的服务层编写单元测试。这是我正在写的测试。我正在尝试回复,但我遇到了嘲笑问题。当我调试 saveCustomerRecordTextFile.WriteToDiskCustomerRecordAsync 方法时返回 null 并且我不确定我做错了什么。

  public class InvitationServiceTests
  { 
    private readonly Mock<ITranformToCustomerDistanceRecord> _customerRecordFileReader;
    private readonly Mock<ISaveInviteeRecord> _customerRecordFileOutputWriter;
    private readonly Mock<ICustomerDistanceFromDublinOffice> _distanceFromDublinOffice;
    private readonly Mock<ISaveCustomerRecord> _saveCustomerRecordTextFile;
    public InvitationServiceTests()
    {
        _customerRecordFileReader = new Mock<ITranformToCustomerDistanceRecord>();
        _customerRecordFileOutputWriter = new Mock<ISaveInviteeRecord>();
        _distanceFromDublinOffice = new Mock<ICustomerDistanceFromDublinOffice>();
        _saveCustomerRecordTextFile = new Mock<ISaveCustomerRecord>();
   }

[Fact]
public void InvitationService_return_statusOk()
{

    _saveCustomerRecordTextFile.Setup(c => c.WriteToDiskCustomerRecordAsync(It.IsAny<IFormFile>())).Returns(Task.FromResult(It.IsAny<string>()));

    var invitationService = new InvitationService(_customerRecordFileReader.Object,
        _customerRecordFileOutputWriter.Object,
        _distanceFromDublinOffice.Object,
        _saveCustomerRecordTextFile.Object);

    var s = invitationService.InviteToDublinOfficeAsync(It.IsAny<IFormFile>());

}

代码实现:

    public class InvitationService : IInvitationService
    {
        private readonly ITranformToCustomerDistanceRecord _customerRecordFileReader;
        private readonly ISaveInviteeRecord _customerRecordFileOutputWriter;
        private readonly ICustomerDistanceFromDublinOffice _distanceFromDublinOffice;
        private readonly ISaveCustomerRecord _saveCustomerRecordTextFile;

        public InvitationService(
            ITranformToCustomerDistanceRecord customerRecordFileReader, 
            ISaveInviteeRecord customerRecordFileOutputWriter,
            ICustomerDistanceFromDublinOffice distanceFromDublinOffice,
            ISaveCustomerRecord saveCustomerRecordTextFile)
        {   
            _customerRecordFileReader = customerRecordFileReader ?? throw new ArgumentNullException(nameof(customerRecordFileReader)); 
            _customerRecordFileOutputWriter = customerRecordFileOutputWriter ?? throw new ArgumentNullException(nameof(customerRecordFileOutputWriter));
            _distanceFromDublinOffice = distanceFromDublinOffice ?? throw new ArgumentNullException(nameof(distanceFromDublinOffice));
            _saveCustomerRecordTextFile = saveCustomerRecordTextFile ?? throw new ArgumentNullException(nameof(saveCustomerRecordTextFile));

        }
        public async Task<InviteeResponse> InviteToDublinOfficeAsync(IFormFile file)
        {
           var filepath =  await _saveCustomerRecordTextFile.WriteToDiskCustomerRecordAsync(file);
           var customerRecords = _customerRecordFileReader.MappingFromTextFileToCustomerRecord(filepath);
           var customerRecordsWithDistance = _distanceFromDublinOffice.TransformCustomerRecordToInviteeDistanceRecord(customerRecords);
           return  _customerRecordFileOutputWriter.WriteToDiskInviteeToOffice(customerRecordsWithDistance);
        }
    } 

标签: c#moqxunit

解决方案


.Returns(Task.FromResult(It.IsAny<string>()));您不应该在返回语句 Moq 中使用 It 类 - 在设置的返回中使用 It.IsAny 时会发生什么?

将其替换为您想要的任何值,例如 String.Empty 或 smthn


推荐阅读