MVC Müzik Mağazası örnek uygulamasının yardımıyla bunu başardım.
[Fact]
public async Task DontCreateAdminUserWhenOtherAdminsPresent()
{
await UserManager.CreateAsync(new ApplicationUser { UserName = "[email protected]" }, "IDoComplyWithTheRules2016!");
...
}
ise:
public class DatabaseSetupTests : IDisposable
{
private MyDbContext Context { get; }
private UserManager<ApplicationUser> UserManager { get; }
public DatabaseSetupTests()
{
var services = new ServiceCollection();
services.AddEntityFramework()
.AddInMemoryDatabase()
.AddDbContext<MyDbContext>(options => options.UseInMemoryDatabase());
services.AddIdentity<ApplicationUser, IdentityRole>()
.AddEntityFrameworkStores<MyDbContext>();
// Taken from https://github.com/aspnet/MusicStore/blob/dev/test/MusicStore.Test/ManageControllerTest.cs (and modified)
// IHttpContextAccessor is required for SignInManager, and UserManager
var context = new DefaultHttpContext();
context.Features.Set<IHttpAuthenticationFeature>(new HttpAuthenticationFeature());
services.AddSingleton<IHttpContextAccessor>(h => new HttpContextAccessor { HttpContext = context });
var serviceProvider = services.BuildServiceProvider();
Context = serviceProvider.GetRequiredService<MyDbContext>();
UserManager = serviceProvider.GetRequiredService<UserManager<ApplicationUser>>();
}
....
}
Sonra örneğin, benim birim testlerinde UserManager kullanabilirsiniz: my Birim Test sınıfta
, böyle Veritabanı içerik ve UserManager kurmak Bağımlılık Enjektörünüz bir IHttpContextAccessor çözümünü çözemiyorsa, buna bağlı olarak bir UserManager örneği oluşturamayacaksınız. Sanırım (ve bu sadece bir varsayımdır), Asp.Net 5 ile UserManager, bir kullanıcı için onları değiştirirken (iddialar, roller ...) yenilenen çerez temelli iddialarla ilgilenir ve bu nedenle bazı HttpContext için giriş/çıkış işlemleri ve çerez erişimi.
Bunun için bir çözüm buldunuz mu? Hesap denetleyicim için bir birim testi oluşturmaya çalışıyorum. – Jonathan
Temelde sadece xunit desteğini beklemeye karar verdi. – hally9k