Я сделал этот метод, чтобы упростить юнит-тестирование DbContext
.Этот метод делает Context
из моих db
в памяти.Это работает, потому что я тестирую его с сущностями (такими как _context.Projects
, _context.Tests
и т. Д., В модульном тестировании этот метод работает):
public static TaskManagerDbContext Create()
{
var options = new DbContextOptionsBuilder<TaskManagerDbContext>()
.UseInMemoryDatabase(Guid.NewGuid().ToString())
.EnableSensitiveDataLogging(true)
.Options;
var context = new TaskManagerDbContext(options);
context.SaveChanges();
return context;
}
My DbContextClass
выглядит так:
public class TaskManagerDbContext : IdentityDbContext<ApplicationUser>, ITaskManagerDbContext
{
public TaskManagerDbContext(DbContextOptions<TaskManagerDbContext> options)
: base(options)
{
}
//db sets here
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.ApplyConfigurationsFromAssembly(typeof(TaskManagerDbContext).Assembly);
}
}
Мой вопрос: можем ли мы сделать Identity UserManager
, SignInManager
, RoleManager
в памяти, как мы можем сделать с IdentityDbContext
?Как провести модульное тестирование Identity
таких вещей, как пользователи, роли в памяти, как мы можем сделать со стандартным Context
?Как назвать это Managers
в поддельном контексте, который хранится в памяти во время его тестирования?
РЕДАКТИРОВАТЬ:
На основе этот SO Вопрос Удостоверение личности context
, что очевидно.Но как использовать Managers
для созданного IdentityDbContext
методом UseInMemoryDatabase()
?
EDIT2:
Я делаю инъекцию context
с помощью приспособления:
public class DatabaseFixture
{
public TaskManagerDbContext Context { get; private set; }
public DatabaseFixture()
{
this.Context = DatabaseContextFactory.Create();
}
}
[CollectionDefinition("DatabaseTestCollection")]
public class QueryCollection : ICollectionFixture<DatabaseFixture>
{
}
И использование его:
[Collection("DatabaseTestCollection")]
public class RegisterUserCommandTests
{
private readonly TaskManagerDbContext _context;
public RegisterUserCommandTests(DatabaseFixture fixture)
{
_context = fixture.Create();
}
//and usage of it in class:
var user = _context.Projects.Find(8);
}
Я использую Xunit
.