我正在编写如下单元测试用例。
[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。有人可以帮我解决这个问题吗?任何帮助将不胜感激。谢谢