![](/img/trans.png)
[英]Unit testing asp.net mvc restful routing FormatResult
[英]Unit testing routing in ASP.NET Core 1.0 (ex MVC 6)
隨着ASP.NET Core 1.0(前MVC 6 / ASP.NET 5.0)的體系結構發生了重大變化,如何進行單元測試路由?
作為一個例子,我喜歡像這樣的庫(對於<= MVC 5): https : //github.com/AnthonySteele/MvcRouteTester
一些流暢的擴展方法:
routes.ShouldMap("/").To<HomeController>(x => x.Index());
好吧......我對ASP.NET團隊進行了ping操作並詢問他們如何進行測試。
你不能在不嘲笑世界的情況下進行單元測試。 你必須進行集成/功能測試。
路由可以來自許多地方(屬性,預定義的路由,區域等),甚至可以被中間件更改。 在測試中包括所有這些場景需要設置一些大量的依賴樹,同時有一種更簡單的方法來測試它。
基本上,他們正在創建一個TestStartup.cs
,在測試過程中自我托管應用程序並自行查看它的行為方式。 他們覆蓋了結果......這就是它。
我想我已經給你了所有可能的工具來實際為自己引導一些東西。
實際上,編寫自己的路由測試框架並不是很難。 我在MyTested.AspNetCore.Mvc中實現了路由測試,它運行迅速且沒有任何問題 - https://github.com/ivaylokenov/MyTested.AspNetCore.Mvc
您可以查看代碼,但基本上,您需要以下內容:
考慮到這些步驟,即使像下面這樣的測試也能正常工作:
// action
public class NormalController : Controller
{
[HttpPost]
public IActionResult UltimateModelBinding(
ModelBindingModel model,
[FromServices]IUrlHelperFactory urlHelper)
{
return null;
}
}
// model
public class ModelBindingModel
{
[FromBody]
public RequestModel Body { get; set; }
[FromForm(Name = "MyField")]
public string Form { get; set; }
[FromQuery(Name = "MyQuery")]
public string Query { get; set; }
[FromRoute(Name = "id")]
public int Route { get; set; }
[FromHeader(Name = "MyHeader")]
public string Header { get; set; }
}
// unit test
MyMvc
.Routes()
.ShouldMap(request => request
.WithLocation("/Normal/UltimateModelBinding/100?myQuery=Test")
.WithMethod(HttpMethod.Post)
.WithJsonBody(new
{
Integer = 1,
String = "MyBodyValue"
})
.WithFormField("MyField", "MyFieldValue")
.WithHeader("MyHeader", "MyHeaderValue"))
.To<NormalController>(c => c.UltimateModelBinding(
new ModelBindingModel
{
Body = new RequestModel { Integer = 1, String = "MyBodyValue" },
Form = "MyFieldValue",
Route = 100,
Query = "Test",
Header = "MyHeaderValue"
},
From.Services<IUrlHelperFactory>()));
PS不要寫這樣的動作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.