C# 如何在AddClaimsAsync方法中模拟IEnumerable以运行单元测试

C# 如何在AddClaimsAsync方法中模拟IEnumerable以运行单元测试,c#,unit-testing,claims,C#,Unit Testing,Claims,我需要模拟这里的AddClaimsAsync()方法。我对IEnumerable有问题。阅读后我发现,如果我模拟一个对象,然后将其添加到集合中,它应该可以工作 public async Task<IdentityResult> AddClaimsAsync(IntentUser user, IEnumerable<Claim> claims) { return await this.userManager.AddClaimsAsync(user, claims);

我需要模拟这里的
AddClaimsAsync()
方法。我对
IEnumerable
有问题。阅读后我发现,如果我模拟一个对象,然后将其添加到集合中,它应该可以工作

public async Task<IdentityResult> AddClaimsAsync(IntentUser user, IEnumerable<Claim> claims)
{
    return await this.userManager.AddClaimsAsync(user, claims);
}
我得到的错误是:

ISetup
”不包含 “
ReturnsAsync
”的定义和最佳扩展方法重载 “
ReturnsExtensions.ReturnsAsync(IReturns,
IntentUser,TimeSpan)
'需要类型为的接收器 “
IReturns


我不需要返回任何东西,这是一个无效的方法

我也不需要嘲笑任何东西。这很管用

        userManagerWrapperMock.Setup(u => u.AddClaimsAsync(admin, new[]
        {
            new Claim(JwtClaimTypes.Name, dto.FirstName),
            new Claim(JwtClaimTypes.GivenName, dto.FirstName),
            new Claim(JwtClaimTypes.FamilyName, dto.FamilyName),
            new Claim(JwtClaimTypes.Email, dto.Email),
            new Claim(JwtClaimTypes.EmailVerified, dto.EmailConfirmed.ToString(), ClaimValueTypes.Boolean)
        }));

ReturnsAsync()
应该传递希望模拟方法返回的内容。因此,您的意思是:
ReturnsAsync(IdentityResult.Success)
?它不是一个无效的方法,它返回
Task
,它现在将返回
null
(假设
MockBehavior.Default
Loose
),如果您在调用站点中检查结果(
var result=await userManager.AddClaimsAsync()
),将引发该错误。
await userManagerWrapper.AddClaimsAsync(usr, new[]
{
    new Claim(JwtClaimTypes.Name, userDto.FirstName),
    new Claim(JwtClaimTypes.GivenName, userDto.FirstName),
    new Claim(JwtClaimTypes.FamilyName, userDto.FamilyName),
    new Claim(JwtClaimTypes.Email, user.Email),
    new Claim(JwtClaimTypes.EmailVerified, user.EmailConfirmed.ToString(), ClaimValueTypes.Boolean)
});
        userManagerWrapperMock.Setup(u => u.AddClaimsAsync(admin, new[]
        {
            new Claim(JwtClaimTypes.Name, dto.FirstName),
            new Claim(JwtClaimTypes.GivenName, dto.FirstName),
            new Claim(JwtClaimTypes.FamilyName, dto.FamilyName),
            new Claim(JwtClaimTypes.Email, dto.Email),
            new Claim(JwtClaimTypes.EmailVerified, dto.EmailConfirmed.ToString(), ClaimValueTypes.Boolean)
        }));