У меня есть приложение ASP.NET MVC 5 (.NET Framework) с Entity Framework 6.2.Для тестирования я использую фреймворки NUnit и Moq.
Мне нужно проверить, истинно ли roleResult.Succeeded
, когда метод RoleExists()
extension (static) возвращает false для роли "User"
.
HomeController.cs
:
private ApplicationDbContext _db;
private RoleManager<IdentityRole> _roleManager;
private ApplicationUserManager _userManager;
// Hard Entity Framework dependency (working application)
public HomeController()
{
_db = new ApplicationDbContext();
_roleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(_db));
_userManager = new ApplicationUserManager(new UserStore<ApplicationUser>(_db));
if (!_roleManager.RoleExists("User"))
{
IdentityResult roleResult = _roleManager.Create(new IdentityRole("User"));
}
}
// Dependency injection only for testing
public HomeController(ApplicationDbContext context, ApplicationUserManager userManager, RoleManager<IdentityRole> roleManager, string role) // DI for testing
{
_db = context;
_roleManager = roleManager;
_userManager = userManager;
if (!_roleManager.RoleExists(role))
{
IdentityResult roleResult = _roleManager.Create(new IdentityRole(role));
}
}
HomeTest.cs
:
[Test]
public void HomeController_RoleDoesNotExist_AddRole()
{
var mockContext = new Mock<ApplicationDbContext>();
var mockUserManager = new Mock<ApplicationUserManager>();
var mockRoleManager = new Mock<RoleManager<IdentityRole>>();
mockRoleManager.Setup(x => x.RoleExists("User")).Returns(false); // Moq says: nope :<
var homeController = new HomeController(mockContext.Object, mockUserManager.Object, mockRoleManager.Object, "User");
// Some Assert that I really don't know to deal with.
}
Первое: я не знаю, как реализовать код тестирования, отвечающий за получение значения roleResult.Succeeded
.
Второе: Moq не может настроить статические методы, и я не знаю, как с этим справиться в моей ситуации.Возможно, мне придется заменить частные свойства в моем классе HomeController
на несколько новых интерфейсов, но тогда моя зависимость Hard Entity Framework перестанет работать из-за, например: _db = new ApplicationDbContext() cannot be converted to IMyNewAppDbContext
.
Спасибо за помощь.