Alay HttpContext.Test geçerli Init Yöntemi
Yaptım ASP.NET MVC uygulama için birim testi eklemek için çalışıyorum. Benim birim testleri aşağıdaki kodu kullanın:
[TestMethod]
public void IndexAction_Should_Return_View() {
var controller = new MembershipController();
controller.SetFakeAuthenticatedControllerContext("TestUser");
...
}
Aşağıdaki denetleyicisi bağlam alay yardımcıları:
public static class FakeControllerContext {
public static HttpContextBase FakeHttpContext(string username) {
var context = new Mock<HttpContextBase>();
context.SetupGet(ctx => ctx.Request.IsAuthenticated).Returns(!string.IsNullOrEmpty(username));
if (!string.IsNullOrEmpty(username))
context.SetupGet(ctx => ctx.User.Identity).Returns(FakeIdentity.CreateIdentity(username));
return context.Object;
}
public static void SetFakeControllerContext(this Controller controller) {
var httpContext = FakeHttpContext(null);
var context = new ControllerContext(new RequestContext(httpContext, new RouteData()), controller);
controller.ControllerContext = context;
}
public static void SetFakeAuthenticatedControllerContext(this Controller controller, string username) {
var httpContext = FakeHttpContext(username);
var context = new ControllerContext(new RequestContext(httpContext, new RouteData()), controller);
controller.ControllerContext = context;
}
}
Bu test sınıfı: hangi temel sınıfından miras alır
[TestInitialize]
public void Init() {
...
}
Bu yöntem içinde aşağıdaki kodu çalıştırmak için çalışan bir kütüphane hiç kontrol edemediğimiz () çağırır:
HttpContext.Current.User.Identity.IsAuthenticated
Şimdi muhtemelen sorun görebilirsiniz. Bu temel Init yöntemi denetleyicisine ama sahte HttpContext set var. Birim test / alay bunu doğru anladığımdan emin olmak istiyorum bu yüzden benim için çok yeni. Beni böylece dışarı HttpContext Alay etmek için doğru yol nedir benim denetleyicisi arasında paylaşılan ve Init yöntemi olarak adlandırılan herhangi bir kütüphane.
Çok memnun olurum. Teşekkürler
CEVAP
HttpContext.Current
System.Web.HttpContextBase
aşmıyor System.Web.HttpContext
bir örneğini verir. HttpContextBase
sonraki HttpContext
alay zor olan adrese eklenmiştir. İki sınıf temelde ilgisiz (HttpContextWrapper
aralarında bir adaptör olarak kullanılır).
Neyse ki, HttpContext
fakeable IPrincipal
(Kullanıcı) ve IIdentity
değiştirmek için yeterli kendisidir.
Aşağıdaki kod beklendiği gibi, hatta bir konsol uygulaması olarak çalışır:
HttpContext.Current = new HttpContext(
new HttpRequest("", "http://tempuri.org", ""),
new HttpResponse(new StringWriter())
);
// User is logged in
HttpContext.Current.User = new GenericPrincipal(
new GenericIdentity("username"),
new string[0]
);
// User is logged out
HttpContext.Current.User = new GenericPrincipal(
new GenericIdentity(String.Empty),
new string[0]
);
ASP.Net Kimlik - HttpContext GetOwinCo...
Nasıl bir test yöntemi çalıştırmak içi...
Geçerli yürütme yöntemi adı alma...
Nasıl İHttpActionResult döndüğü zaman ...
BASH: dize bir tamsayı olarak geçerli ...