2015-12-20 29 views
8

Kullanıcıları bir ASP.NET 5 uygulamasında yönetmek için bir UI yazıyorum. Kullanıcı Arayüzü tarafından UI'de döndürülen hataları göstermem gerekiyor. Görünüm modeline geri döndüğüm IdentityResult hatalarım var ancak kodumun test edilmesi söz konusu olduğunda ben bir dokunuşum var.ASP.NET'te UserManager'ı nasıl atarsınız? 5

UserManager ürününü ASP.NET 5 numaralı telefonla aramanın en iyi yolu nedir?

ben UserManager devralan ve ben kullanıyorum tüm yöntemleri geçersiz kılma ve sonra benim test projesinde Controller örneğine içine UserManager benim versiyonunu enjekte mıdır?

+0

Bunun için bir çözüm buldunuz mu? Hesap denetleyicim için bir birim testi oluşturmaya çalışıyorum. – Jonathan

+0

Temelde sadece xunit desteğini beklemeye karar verdi. – hally9k

cevap

16

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.

+0

Kaynağa bağlantı sağladığınız için teşekkür ederiz - uygulamamda, kodunuz UserManager.GetUserAsync null değerini döndürdü, ancak bunu MusicStore örneğinden yeniden oluşturduktan sonra çalıştım. :-) –