2014-07-22 47 views
8

我有一個具有路由屬性的控制器。該控制器在單元測試失敗,因爲路徑找不到:基於屬性的路由的單元測試

A route named 'Values' could not be found in the route collection

這是控制器的方法:

[Route("api/values", Name="ApiValues")] 
[HttpGet] 
public HttpResponseMessage Get() 
{ 
    urlHelper.Link("ApiValues", new {}); 
} 

這是我的單元測試:

var valuesController = new ValuesController() 
{ 
    Request = new HttpRequestMessage 
    { 
     RequestUri = new Uri("http://localhost/api/") 
    }, 
    Configuration = new HttpConfiguration() 
}; 

valuesController.Get(); 

我也試圖將其添加到單元測試中:

valuesController.Configuration.MapHttpAttributeRoutes(); 
valuesController.Configuration.EnsureInitialized(); 

但這沒有任何幫助。

+0

奇怪的是,我不能瑞普您的問題請參考真棒解釋。一切工作正常在我的機器上。什麼是你使用的webapi版本?你提供了所有的測試代碼嗎?我認爲單元測試不會運行屬性路由部分。 –

+0

控制器操作中的「urlHelper」是什麼?你能分享一下嗎?謝謝 –

回答

11

我得到了同樣的錯誤:

A route named 'Values' could not be found in the route collection. 

但單元測試通過我的機器上我想補充MapHttpAttributeRoutesEnsureInitialized後:

var valuesController = new ValuesController() 
{ 
    Request = new HttpRequestMessage { RequestUri = new Uri("http://localhost/api/") }, 
    Configuration = new HttpConfiguration() 
}; 

valuesController.Configuration.MapHttpAttributeRoutes(); 
valuesController.Configuration.EnsureInitialized(); 

valuesController.Get(); 

你能否提供更多的信息提供給攝製的問題或檢查我們的測試代碼是否有區別?

+0

我重新檢查了一切,因爲你說它工作。它也適用於我的機器。謝謝! – user369117

1

不是直接在Unit測試中調用控制器,而是使用Helper方法獲得Controller contextAction context。這將避免使用

valuesController.Configuration.MapHttpAttributeRoutes(); 
valuesController.Configuration.EnsureInitialized(); 

由菲利普W.上Testing routes in Web API 2