J'essaie d'ajouter des tests unitaires à une application ASP.NET MVC que j'ai créée. Dans mes tests unitaires J'utilise le code suivant:Mock HttpContext.Current dans Test Init, méthode
[TestMethod]
public void IndexAction_Should_Return_View() {
var controller = new MembershipController();
controller.SetFakeControllerContext("TestUser");
...
}
Avec les aides suivantes pour se moquer du contexte du contrôleur:
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, string username = null) {
var httpContext = FakeHttpContext(username);
var context = new ControllerContext(new RequestContext(httpContext, new RouteData()), controller);
controller.ControllerContext = context;
}
}
Cette classe de test hérite d'une classe de base qui a les éléments suivants:
[TestInitialize]
public void Init() {
...
}
dans cette méthode, il appelle une bibliothèque (que je ne contrôle pas) qui tente d'exécuter le code suivant:
HttpContext.Current.User.Identity.IsAuthenticated
Maintenant, vous pouvez probablement voir le problème. J'ai mis le faux HttpContext contre le contrôleur mais pas dans cette méthode Init de base. Les tests unitaires/moqueurs sont très nouveaux pour moi, je veux donc m'assurer de bien comprendre. Quelle est la manière correcte pour moi de maquiller le HttpContext afin qu'il soit partagé sur mon contrôleur et toutes les bibliothèques qui sont appelées dans ma méthode Init.
Vive mais comment J'ai mis ceci pour un utilisateur déconnecté? – nfplee
@nfplee - Si vous passez une chaîne vide dans le constructeur 'GenericIdentity',' IsAuthenticated' retournera false –
Est-ce que cela pourrait être utilisé pour simuler Cache dans le HttpContext? – DevDave