- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试研究如何将单元测试添加到我的项目中。我认为最好从一个空白项目开始,然后从头开始解决,而不是将其添加到我的主项目中。一旦我理解了这个过程,我想我可以开始重构我的项目以添加测试。
所以我创建了一个 Web 应用程序并向其添加了默认用户身份。
这给了我一个看起来像这样的开始
public void ConfigureServices(IServiceCollection services)
{
services.Configure<CookiePolicyOptions>(options =>
{
// This lambda determines whether user consent for non-essential cookies is needed for a given request.
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("DefaultConnection")));
services.AddDefaultIdentity<IdentityUser>()
.AddEntityFrameworkStores<ApplicationDbContext>();
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
}
然后我创建了一个简单的 Controller 并在构造函数中传递了用户管理器。
[Route("api/[controller]")]
[ApiController]
public class SweetController : ControllerBase
{
private readonly UserManager<IdentityUser> _userManager;
public SweetController(UserManager<IdentityUser> userManager)
{
_userManager = userManager;
}
public async Task<int> NumberOfGummyBearsForUser(string userId)
{
var user = await _userManager.FindByIdAsync(userId);
var userHasASweetTooth = await _userManager.IsInRoleAsync(user, "SweetTooth");
if (userHasASweetTooth)
{
return 100;
}
else
{
return 1;
}
}
}
我一直在尝试做的第一件事是模拟这个用户管理器,但它不起作用。
public void Test1()
{
// Arrange
var mockUser = new Mock<UserManager<IdentityUser>>();
var userManager = new UserManager(mockRepo.Object); <-- error here see image below
var controller = new SweetController(userManager.Object);
// Act
var result = await controller.NumberOfGummyBearsForUser("123");
// Assert
Assert.Equal(100, result);
}
错误看起来像这样
我想我需要传递更多信息来创建这个 usermanager 对象,但我不确定我找到的所有教程都使用 ApplicationUser 而不是 IdentityUser,所以我不知道如何模拟这个对象。
最佳答案
你就是这样
// Arrange
var mockUser = new Mock<UserManager<IdentityUser>>();
var controller = new SweetController(mockUser.Object);
你不需要
var userManager = new UserManager(mockRepo.Object); <-- error here see image below
完全没有。 mockUser
已经是 mock UserManager<T>
,你通过 mock.Object
放置一个模拟实例.
当你模拟一个对象时,你不必用它的所有依赖项来实例化它(那将是集成测试),这就是模拟的重点(以及使方法返回所需的值并进行行为测试以确保您的测试代码调用了具有模拟对象的特定参数的特定方法。
当然,上面的代码本身是行不通的,因为您没有为 FindByIdAsync
设置任何测试条件/返回值。和 IsInRoleAsync
.您必须使用
mockUser.Setup( userManager => userManager.FindByIdAsync(It.IsAny<string>()))
.ReturnsAsync(new IdentityUser { ... });
mockUser.Setup( userManager => userManager.IsInRoleAsync(It.IsAny<IdentityUser>(), "SweetTooth"))
.ReturnsAsync(true);
然后,无论何时调用模拟,它都会返回您预定义的用户和预定义的结果。
关于c# - 如何模拟 UserManager<IdentityUser>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55412776/
我使用以下代码来更改用户的密码: UserManager userManager = new UserManager(new UserStore(new ApplicationDbContext())
我正在尝试实现 Asp.Net Identity 2.0。到目前为止,我在 this blog 的帮助下管理得很好.但我走了一条稍微不同的路。我希望某些数据不属于 User 对象,而是属于新创建的 C
这个问题在这里已经有了答案: How would I run an async Task method synchronously? (25 个回答) 3个月前关闭。 在我的其中之一 IDatabas
我必须为我的单元测试创建 owin 环境,这是创建 Usermanager 对象所必需的。在我目前的情况下,我的 usermanager 为空,因为它没有获取 owincontext。 这是我访问
我有以下代码: var clientId = this.UserManager.FindById(this.User.Identity.GetUserId()).ClientId; 它是我应用程序中
我有一个问题,当我创建用户时,它没有初始化 list<> 类型的属性 - 我收到以下错误: An unhandled exception occurred while processing the r
我有一个应用程序使用 Microsoft.AspNetCore.Identity.UserManager 来管理用户。我使用核心 2.2。 UserManager 是通过我的服务中的内置依赖项注入(i
使用 ASP.NET Core 2。 我正在尝试初始化一些应用程序范围的数据。为此,我创建了一个名为 DbInitializer 的新类。 ,一个名为 IDbInitializer 的接口(inter
我的应用程序的所有身份验证和授权过程都是使用存储过程完成的。我已经编写了一个包含我需要的所有功能的类,例如GetUsers、Login、AddRole、AddMember 等。此外,用于管理用户、角色
UserManager.FindAsync 总能找到匹配项,即使我输入了错误的用户名和密码,它也总是会返回某种用户 ID。 [HttpPost] public ActionResult Mobilel
ASPNET Identity 中的 UserManager 包含 AddPasswordAsync 和 SetPhoneNumberAsync 等函数。 我已经为 FirstName 和 LastN
背景 我正在使用 .Net Core API 来驱动歌词应用程序。用户可以注册、提交艺术家和歌词,并在此过程中获得荣誉/XP 积分。基本上是一个社区驱动的歌词网站。 代码 这是我的 ArtistCon
所以我创建了这个继承自 UserManager 的用户服务,它看起来像这样: /// /// Service for handling users /// public class UserSer
我想做的是添加一个新的管理员用户并为其分配管理员角色。所以..我转到 Configure 方法中的 Startup.cs 类并编写了以下代码: var context = app.Applicatio
我有一个带有自定义电子邮件服务的自定义用户管理器。我在 AccountController 中调用 UserManager.SendEmailAsync() 方法,它只是挂起。我什至尝试将它与无效的
Android 7.1 UserManager类中出现的这个新方法描述here Checks if the calling app is running in a demo user. When ru
我正在使用 FOSUserBundle 并创建了一个自己的模型,其中包含一些新字段(例如 deviceVersion ( string ) 和 deviceType ( string )。 如果我创建
尝试使用 UserManager CreateAsync 方法创建新用户时出现以下错误。我使用的是未修改的 IdentityUser 和 IdentityRole。我有一些 DBSets,它们填充了数
我有一些服务负责在使用 UserManager 时更改用户密码并且一切正常,但是当我想编写一些测试时,它开始在方法 CheckPassword,它主要检查 current (old password)
如何在 ASP.NET Identity 中模拟 UserManager.GetRoles()?我知道它是一个扩展方法,所以我不能直接模拟它,也找不到需要模拟的底层方法/属性。 过去,我能够通过模拟
我是一名优秀的程序员,十分优秀!