2012-11-27 30 views
7

Cách chúng tôi có thể giả định người dùng được xác thực bằng cách sử dụng khung công tác Moq. Đã sử dụng Xác thực biểu mẫu.Giả sử người dùng được xác thực bằng cách sử dụng Moq trong thử nghiệm đơn vị

tôi cần phải viết các unit test cho các hành động dưới đây

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

tôi cần phải thử các giá trị cho userid đây

+2

Sự tò mò nhàn rỗi - bạn đã thử bất cứ điều gì trước khi bạn hỏi tại đây chưa? Điều gì không hiệu quả với bạn? –

+1

Có thể [tương tự SO chủ đề] (http://stackoverflow.com/questions/3027264/mocking-user-identity-in-asp-net-mvc) có thể giúp ích? –

+1

Wehey. Cũng giống như tôi đã giải quyết nó quá. Điểm mấu chốt là, xem xét các chủ đề như tiêm phụ thuộc và đảo ngược kiểm soát. –

Trả lời

18

Tôi đã sử dụng một cái gì đó như thế, có thể nó sẽ giúp bạn:

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

Tôi làm điều đó theo cách tương tự, không cần chế nhạo 'IPrincipal': ' contollerContext.Setup (ctx => ctx.HttpContext.User.IsInRole ("Administrator")). Returns (true); ' –

Các vấn đề liên quan