如何解决模拟不返回设置值
我在下面使用 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);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。