编写xunit测试以测试通过的无效值

问题描述 投票:0回答:1

我正在学习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
        ?
    }

我正在寻找使用模拟的解决方案

c# moq xunit autofixture
1个回答
0
投票

您必须在_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>()));
        }
© www.soinside.com 2019 - 2024. All rights reserved.