我正在学习xunit,moq和autofixture。我的下面有方法服务层,我想测试它的ID是否错误。我要传递的ID在测试中不存在。
public async Task<MyData> DeleteRecord(int Id)
{
using (var transaction = _myRepository.BeginTransaction())
{
try
{
var result = await _myRepository.recordDeleteAsync(Id);
if (result == null)
{
throw new ArgumentException("Unable to find file");
}
transaction.Commit();
return result;
}
catch (Exception ex)
{
transaction.Rollback();
}
}
}
这里是测试。如何调用deleteRecord方法并模拟我的_myRepository.recordDeleteAsync,然后写我的断言。
[Fact]
public async Task DeleteFile_WhenIPassInInvalidId_shouldReturnIdNotFound()
{
//Arrange
var Id = 56789;
//Act
_softRepositoryMock.Setup(x => x.recordDeleteAsync(Id)).ReturnsAsync(?);
//Asserts
?
}
我正在寻找使用模拟的解决方案
您必须在_myRepository模拟中返回null
用您的服务名称替换Sut。
[Fact]
public async Task DeleteFile_WhenIPassInInvalidId_shouldReturnArgumentException()
{
//Arrange
_softRepositoryMock.Setup(x => x.recordDeleteAsync(It.IsAny<string>())).ReturnsAsync((MyData)null);
//Act & Asserts
await Assert.ThrowsAsync<ArgumentException>(async () => await this.Sut.recordDeleteAsync(fixture.Create<string>()));
}