因此,我正在使用FakeItEasy为我的ASP.NET Web Api应用程序编写xUnit测试. 下面是我的测试,它应该返回一个MemberDto对象列表;

       public async Task UsersController_GetUsers_ReturnsOK()
        {
            //Arrange

            //var users = A.Fake<IEnumerable<MemberDto>>();
            //A.CallTo(() => _userRepository.GetMembersAsync(A<string>.That.Matches(email => true))).Returns(users);

            //Act
            var result = await _controller.GetUsers();

            //Assert
            result.Should().NotBeNull();
            result.Should().BeOfType<ActionResult<IEnumerable<MemberDto>>>();
            result.Result.Should().BeOfType<OkObjectResult>();
        }
}

GetUser方法在控制器中的实现:

{
    public async Task<ActionResult<IEnumerable<MemberDto>>> GetUsers()
    {   
        var currentUser = await _userRepository.GetUserByEmailAsync(_userExtensions.GetEmail(User));
        users = await _userRepository.GetMembersAsync(currentUser.Email);

        return Ok(users);
    }
}

正如您所看到的,我已经注释掉了xUnit测试中的代码行,其中它模拟了_userRepository中的GetMembersAsync方法,但无论如何它都会伪造数据(用户不是空的,它的类型将是伪造的System.Collection...)

就是这样,有人能给我解释一下吗?这是我第一次编写单元测试,我一直在YouTube上看到一个叫Teddy Smith的人在那里解释如何编写单元测试.我从他的GitHub下载了他的示例课程,并用嘲弄的方式注释掉了这行,它确实通过了测试,无论这行有没有,什么都没有改变.谢谢

推荐答案

FakeItEasy附带了一组默认行为,开发人员认为这些行为很有用.因此,默认情况下,具有返回值的成员将返回一些内容(具体地说,是一个"哑元",即相关类型的非空对象).

IEnumerable的情况下,哑元将是一个看起来像枚举数的东西,其成员本身返回更多的哑元.在本例中,它将返回一个伪枚举数,其MoveNext返回一个伪布尔值(即false,因此GetMembersAsync返回看起来像空可枚举数的值.

你可以在Default fake behavior → Overrideable members are faked岁时阅读更多.

Csharp相关问答推荐

更改对象的旋转方向

有没有一种方法可以防止在编译时在MicrosoftC或非单线程上下文中调用方法?

哪个nuget包含SecurityStampValidatorOptions

有没有办法把+02:00转换成TimeSpan?""

. NET 8控制台应用程序DI错误无法解析Microsoft. Extension. Logging. ILoggerFactory类型的服务'''

将XPS转换为PDF C#

与C#中的Zip列表并行

发布用于Linux Ubuntu的C#应用程序

使用可信第三方的Iext8.Net pdf签名

由于POST中的应用程序/JWT,出现不支持的内容类型异常

为什么无法将对象转换为泛型类型

C#多键字典和TryGetValue

是否可以从IQueryable T中获取一个IdentyEntry T>

C#Microsoft.CodeAnalysis.CSharp.Scriiting不等待并行.对于

如何将默认区域性更改为fr-FR而不是en-US?

使用本地公共PEM文件加密字符串,使用Azure KayVault中的私钥解密

如何对正方形格线进行对角分组

C#If条件格式

如何提高C#中比较大 struct 的性能?

MudRadioGroup不切换