2013-10-29 59 views
2

我想單元測試一個Web API控制器。之前當單元測試一個標準的MVC控制器時,我已經能夠模擬HTTPContext/Request/User並通過設置控制器上下文來插入它們。但是,這不適用於Web API控制器(ControllerContext的構造函數顯然不接受Web API)。單元測試使用IPrincipal設置的ASP.net Web API

到目前爲止,我有以下設置請求對象。

HttpConfiguration configuration = new HttpConfiguration(); 
HttpRequestMessage request = new HttpRequestMessage(); 

controller.Request = request; 
controller.Request.Properties["MS_HttpConfiguration"] = configuration; 

這工作正常,請求對象是可用的。但是我無法找到任何設置Principal用戶的方法。我已經嘗試以下

Thread.CurrentPrincipal = //Set User 
HttpContext.Current = //Set User 

這兩者似乎都沒有工作。

+0

使用硒或類似的設置用戶。你不能嘲笑一切。 – Ben

+0

當你說「能夠模擬」時,你是否在使用模擬框架? – Mathieson

+0

是的,我們使用Moq/NUnit。 – MindingData

回答

0

在最新版本的Web API,你可以直接在ApiController像這樣

[TestMethod] 
public void GetReturnsProduct() 
{ 
    // Arrange 
    var username = "[email protected]" 
    var user = new ClaimsPrincipal(new CustomIdentity(username)); 
    var controller = new ProductsController(repository); 
    controller.Request = new HttpRequestMessage(); 
    controller.Configuration = new HttpConfiguration(); 
    controller.User = user; 


    // Act 
    var response = controller.Get(10); 

    // Assert 
    Product product; 
    Assert.IsTrue(response.TryGetContentValue<Product>(out product)); 
    Assert.AreEqual(10, product.Id); 
}