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)
}));