2012-11-27 8 views
7

Wie können wir den authentifizierten Benutzer mit Moq-Framework verspotten. Formularauthentifizierung verwendet.Mock authentifizierter Benutzer mit Moq in Unit-Test

I Unit-Tests für die Aktion unter

public PartialViewResult MyGoals() 
{ 
    int userid = ((SocialGoalUser)(User.Identity)).UserId; 
    var Goals = goalService.GetMyGoals(userid); 
    return PartialView("_MyGoalsView", Goals); 
} 

schreiben müssen, ich brauche den Wert für Benutzer-ID zu verspotten hier

+2

Nur Leerlauf Neugier - haben Sie selbst versucht, bevor Sie hier gefragt? Was hat nicht für dich funktioniert? –

+1

Vielleicht [ähnliches SO-Thema] (http://stackoverflow.com/questions/3027264/mocking-user-identity-in-asp-net-mvc) könnte helfen? –

+1

Wehey. Genau wie ich es auch gelöst hätte. Unter dem Strich geht es um Themen wie Abhängigkeitsinjektion und Inversion der Kontrolle. –

Antwort

18

ich so etwas verwendet haben, vielleicht hilft es Ihnen:

var controllerContext = new Mock<ControllerContext>(); 
var principal = new Moq.Mock<IPrincipal>(); 
principal.Setup(p => p.IsInRole("Administrator")).Returns(true); 
principal.SetupGet(x => x.Identity.Name).Returns(userName); 
controllerContext.SetupGet(x => x.HttpContext.User).Returns(principal.Object); 
controller.ControllerContext = controllerContext.Object; 
+0

Ich mache das auf eine ähnliche Weise, nur ohne 'IPrincipal' zu verspotten: ' contollerContext.Setup (ctx => ctx.HttpContext.User.IsInRole ("Administrator")). Rückgabe (true); ' –