【发布时间】:2020-07-26 22:59:26
【问题描述】:
我目前正在设置一些单元测试以使用一些模拟返回咖啡馆的 ID,但由于某种原因,结果变量总是返回 null。
在实现 Get 方法的服务类中设置
public async Task<CafeResponse> Get(int cafeId)
{
var cafe= await _cafeRepository.GetByIdAsync(cafeId);
return _mapper.Map<CafeResponse>(cafe);
}
单元测试设置:当前结果变量显示为空?不知道这是否是由于我错误地设置了模拟
[Fact]
public async Task Get_ShouldReturnCafeArray_WhenCafesInDatabase()
{
//Arrange
var cafeId = 98;
var cafeName = "bellas";
var cafeIdGuid = Guid.NewGuid();
var cafeDesc = "this is my test";
var cafeTypeId = 1;
var cafeDto = new Cafe
{
CafeId = cafeId,
Name = cafeName,
CafeGuid = cafeIdGuid,
Description = cafeDesc,
CafeTypeId = cafeTypeId,
};
var expected = new CafeResponse();
var mockCafe = new Mock<IRepositoryAsync<Cafe>>();
mockCafe.Setup(x => x.GetByIdAsync(cafeId)).ReturnsAsync(cafeDto);
var mockMapper = new Mock<IMapper>();
mockMapper.Setup(x => x.Map<Cafe, CafeResponse>(It.IsAny<Cafe>())).Returns(expected);
//Act
var cafeService = new CafeService(mockCafe.Object, mockMapper.Object);
var result = await cafeService.Get(cafeId); //always returns null
//Assert
mockCafe.Verify(x => x.GetByIdAsync(cafeId), Times.Once);
Assert.Equal(cafeId, result.CafeId);
}
【问题讨论】:
-
您是否期待您的映射器填写完整的咖啡馆回复?目前,您的 mockMapper 正在返回一个空白的 CafeResponse。
-
是的,我期待来自映射器的咖啡馆响应,想要添加更多断言以进行进一步测试
-
@BenSampica 我以为我正确地实现了它?为什么它返回一个空白响应?
-
因为这一行
mockMapper.Setup(x => x.Map<Cafe, CafeResponse>(It.IsAny<Cafe>())).Returns(expected);.expected变量是一个空对象 -
我的服务类中也有一个映射器设置,也许我应该尝试使用它而不是在这个类中创建一个?
标签: c# unit-testing asp.net-core integration-testing