如何在单元测试用例中使用auto mapper?

问题描述 投票:0回答:0

我正在编写如下单元测试用例。

 [TestClass]
    public class CharterBLTest
    {
        private readonly Mock<ICharterRepository> _mockCharterRepository;
        private readonly Mock<ICommercialHistoryRepository> _mockCommercialHistoryRepository;
        private readonly Mock<IMapper> _mockMapper;
        private readonly CharterBL _charterBL;

        public CharterBLTest()
        {
            _mockCharterRepository = new Mock<ICharterRepository>();
            _mockCommercialHistoryRepository = new Mock<ICommercialHistoryRepository>();
            _mockMapper = new Mock<IMapper>();  
            _charterBL = new CharterBL(_mockCharterRepository.Object, _mockCommercialHistoryRepository.Object, _mockMapper.Object);
           
            //_mockMapper = mapper;
        }

        [TestMethod]

        public async Task AddCharterAsyncSuccess()
        {
            var mappingConfig = new MapperConfiguration(mc =>
            {
                mc.AddProfile(new AutoMapperProfile());
            });
            IMapper mapper = mappingConfig.CreateMapper();

            CharterDetailDto charterDetailDto = new CharterDetailDto()
            {
                SourceId = 7,
                ChartererId = 5,
                CharterTypeId = 8,
                Comment = "Comment",
                CurrencyId = 7,
                EstRedelivery = DateTime.Today,
                IMO = "123",
                Max = new DateTime(2021, 01, 01),
                Min = new DateTime(2020, 01, 01),
                Id = 5,
                Rate = 10.3,
                PurchaseObligation = false,
                RedeliveryRangeId = 7,
                RedeliveryPortId = 7,
                UID = "123",
                IsLocked = false
            };
            string validationResult = "success";
            int charterId = 1;
            List<string> imo = new List<string>();
            List<CharterResponseDto> charterResponseDtos = new List<CharterResponseDto>()
            {
                new CharterResponseDto()
                {
                    SourceId =1,
                    Source = "test",
                    Status = "success",
                    ChartererId = 4,
                    ChartererName = "emma",
                    CharterTypeId = 7,
                    CharterTypeName = "mearsk",
                    Delivery = DateTime.Now,
                    Comment = "test comment",
                    Currency = "INR",
                    CurrencyId = 7
                }
            };
            _mockCharterRepository.Setup(x => x.ValidateCharterStatusAsync(charterDetailDto))
                                         .ReturnsAsync(() =>
                                         {
                                             return validationResult;
                                         });
            _mockCharterRepository.Setup(x => x.SaveCharterAsync(charterDetailDto))
                                        .ReturnsAsync(() =>
                                        {
                                            return charterId;
                                        });
            _mockCommercialHistoryRepository.Setup(x => x.GetCharterDetailsAsync(imo, charterId))
                                       .ReturnsAsync(() =>
                                       {
                                           return charterResponseDtos;
                                       });
            CharterResponseDto charterResponseDto = await  _charterBL.AddCharterAsync(charterDetailDto);
        }

    }

下面是实际代码。

public async Task<CharterResponseDto> AddCharterAsync(CharterDetailDto request)
        {
            CharterResponseDto charterResponse = new();
            var validationResult = await _charterRepository.ValidateCharterStatusAsync(request).ConfigureAwait(false);
            if(!string.IsNullOrEmpty(validationResult))
            {
                charterResponse = _mapper.Map<CharterResponseDto>(request);
                charterResponse.ValidationResult = new ValidationResult() { IsSuccess = false,Message = validationResult };
            }
            else
            {
                var charterId = await _charterRepository.SaveCharterAsync(request).ConfigureAwait(false);
                if(charterId != 0)
                {
                    List<CharterResponseDto> charterDetails = await _commercialHistoryRepository.GetCharterDetailsAsync(charterId: charterId).ConfigureAwait(false);
                    charterResponse = charterDetails.FirstOrDefault()!;
                    charterResponse.ValidationResult = new ValidationResult() { IsSuccess = true };
                }

            }
            return charterResponse ?? new CharterResponseDto();

        }

每当我运行或调试我的代码时,我总是得到 null
`

charterResponse = _mapper.Map(请求);

`使用我提供的配置。我已经在我的单元测试用例中配置了自动映射器,但在我的用例中它仍然返回 null。有人可以帮我解决这个问题吗?任何帮助将不胜感激。谢谢

c# .net automapper mstest
© www.soinside.com 2019 - 2024. All rights reserved.