asp.net-core - 模拟没有返回设置值
问题描述
我有下面的方法,我使用 Xunit 和 Moq 进行单元测试。
public class PersonService : IPersonService
{
private readonly IUnitOfWork _unitOfWork;
private readonly IMapper _mapper;
public PersonService(IUnitOfWork unitOfWork, IMapper mapper)
{
_unitOfWork = unitOfWork ?? throw new ArgumentNullException(nameof(unitOfWork));
_mapper = mapper;
}
public async Task<int> PostPersonAsync(PersonModel person)
{
int result = 0;
using (_unitOfWork.Connection)
{
try
{
_unitOfWork.OpenConnection();
_unitOfWork.Begin();
var PersonDto = _mapper.Map<PersonDto>(person);
result = await _unitOfWork.PersonRepository.PostPersonAsync(PersonDto, _unitOfWork.Transaction);
_unitOfWork.Commit();
_unitOfWork.CloseConnection();
}
catch (Exception ex)
{
_unitOfWork.Rollback();
throw;
}
}
return result;
}
}
下面是我的 Xunit 方法:
[Fact]
public void PostPersonAsync_Should_SavePerson()
{
//Arrange
var _IDbTransaction = new Mock<IDbTransaction>();
var _unitOfWorkMock1 = new Mock<IUnitOfWork>();
var PersonDto = _mapper.Map<PersonDto>(PersonServiceData.PersonModel);
int numberofAffectedRows = 5;
_unitOfWorkMock1.Setup(s => s.OpenConnection());
_unitOfWorkMock1.Setup(s => s.PersonRepository.PostPersonAsync(PersonDto, _IDbTransaction.Object)).ReturnsAsync(()=>numberofAffectedRows);
_unitOfWorkMock1.Setup(s => s.CloseConnection());
_target = new PersonService(_unitOfWorkMock1.Object, _mapper);
//Act
var result = _target.PostPersonAsync(PersonServiceData.PersonModel).Result;
//Assert
Assert.Equal(5, result);
}
我不确定为什么它仍然返回零,并且我的测试用例失败了。
我也尝试过以下方法,但我的测试用例仍然失败。
_unitOfWorkMock1.Setup(s => s.PersonRepository.PostPersonAsync(PersonDto, _IDbTransaction.Object)).ReturnsAsync(()=>numberofAffectedRows);
即使在为存储库方法调用设置返回值之后,它也返回零。
解决方案
尝试这个:
_unitOfWorkMock1
.Setup(s => s.PersonRepository.PostPersonAsync(It.IsAny<PersonDto>(), It.IsAny<IDbTransaction>()))
.ReturnsAsync(numberofAffectedRows);
推荐阅读
- symfony - 构建缓存后不考虑 Symfony Doctrine 配置自定义类型
- jquery - 更新进度条可伸缩性
- node.js - 如何在 NodeJs 框架 Adonisjs 中将异步数据从 Controller 传递到 View
- android - 如何在 Android 中解码 ASN.1 Per?
- odoo - 限制用户编辑非自有产品
- jsf - 在不同模板中包含内容页面时的导航
- imagemagick - 将图像从 4500x5400 转换为 4050x4200 保持纵横比
- php - phpmailer附加两个pdf文件
- react-native - React Native 的 react-navigation 正在删除模块
- firebase - Firebase 初始化错误:无法授权访问项目 [PROJECT ID]