2017-01-11 16 views
5

Tôi đang sử dụng API Web 2. Trong bộ điều khiển api trên web tôi đã sử dụng phương thức GetUserId để tạo id người dùng bằng cách sử dụng Nhận dạng Asp.net.Cách tạo danh tính người dùng Asp.net khi kiểm tra bộ điều khiển WebApi

Tôi phải viết kiểm tra đơn vị MS cho bộ điều khiển đó. Làm cách nào tôi có thể truy cập id người dùng từ dự án thử nghiệm?

Tôi có mã mẫu được đính kèm bên dưới.

Web API điều khiển

public IHttpActionResult SavePlayerLoc(IEnumerable<int> playerLocations) 
{ 
    int userId = RequestContext.Principal.Identity.GetUserId<int>(); 
    bool isSavePlayerLocSaved = sample.SavePlayerLoc(userId, playerLocations); 
    return Ok(isSavePlayerLocSaved); 
} 

Web API điều khiển thử nghiệm lớp

[TestMethod()] 
public void SavePlayerLocTests() 
{ 
    var context = new Mock<HttpContextBase>(); 
    var mockIdentity = new Mock<IIdentity>(); 
    context.SetupGet(x => x.User.Identity).Returns(mockIdentity.Object); 
    mockIdentity.Setup(x => x.Name).Returns("admin"); 
    var controller = new TestApiController(); 
    var actionResult = controller.SavePlayerLoc(GetLocationList()); 
    var response = actionResult as OkNegotiatedContentResult<IEnumerable<bool>>; 
    Assert.IsNotNull(response); 
} 

tôi đã cố gắng sử dụng phương pháp mô hình như trên. Nhưng nó không hoạt động. Làm thế nào để tạo ra nhận dạng người dùng Asp.net khi tôi gọi từ phương pháp kiểm tra để điều khiển?

Trả lời

4

Nếu yêu cầu được xác thực thì tài sản tài nên được dân cư với cùng nguyên tắc

public IHttpActionResult SavePlayerLoc(IEnumerable<int> playerLocations) { 
    int userId = User.Identity.GetUserId<int>(); 
    bool isSavePlayerLocSaved = sample.SavePlayerLoc(userId, playerLocations); 
    return Ok(isSavePlayerLocSaved); 
} 

cho ApiController bạn có thể đặt User tài sản trong quá trình sắp xếp lại các đơn vị kiểm tra. Tuy nhiên phương pháp mở rộng đang tìm kiếm một ClaimsIdentity vì vậy bạn nên cung cấp một

thử nghiệm tại sẽ trông như thế

[TestMethod()] 
public void SavePlayerLocTests() { 
    //Arrange 
    //Create test user 
    var username = "admin"; 
    var userId = 2; 

    var identity = new GenericIdentity(username, ""); 
    identity.AddClaim(new Claim(ClaimTypes.NameIdentifier, userId.ToString())); 
    identity.AddClaim(new Claim(ClaimTypes.Name, username)); 

    var principal = new GenericPrincipal(identity, roles: new string[] { }); 
    var user = new ClaimsPrincipal(principal); 

    // Set the User on the controller directly 
    var controller = new TestApiController() { 
     User = user 
    }; 

    //Act 
    var actionResult = controller.SavePlayerLoc(GetLocationList()); 
    var response = actionResult as OkNegotiatedContentResult<IEnumerable<bool>>; 

    //Assert 
    Assert.IsNotNull(response); 
} 
Các vấn đề liên quan