以下のユニットテストを使用して..Iamは私のwebapiをテストしようとしています。
[Test]
public void CheckControllerForCreate()
{
var config = new HttpConfiguration();
config.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always;
var request = new HttpRequestMessage(HttpMethod.Post, "http://localhost/api/product");
var route = config.Routes.MapHttpRoute("Foo", "api/{controller}/{id}");
var routeData = new HttpRouteData(route, new HttpRouteValueDictionary { { "controller", "products" } });
var controller = new ProductController
{
ControllerContext = new HttpControllerContext(config, routeData, request),
Request = request,
Url = new UrlHelper(request)
};
controller.Request.Properties[HttpPropertyKeys.HttpConfigurationKey] = config;
var result = controller.Create(new Product {Id = 4, Name = "Tomato Soup", Category = "Groceries", Price = 1});
}
[HttpPost]
public HttpResponseMessage Create(Product product)
{
var url = Url;
if (product == null)
throw new HttpResponseException(new HttpResponseMessage{StatusCode = HttpStatusCode.BadRequest,ReasonPhrase = "Product is not specified"});
products.Add(product);
var response = Request.CreateResponse(HttpStatusCode.Created, product);
string uri = Url.Link("Foo", product.Id);
response.Headers.Location = new Uri(uri);
return response;
}
であるため、作成アクションは例外をスローしuri
ますnull
。これで、URLヘルパーはRouteNameを正しく取得しています。そうでない場合、RouteNamenotfound例外が発生します。私は自分の設定に何かが間違っていると思います。
コントローラの単体テストについては、http://www.peterprovost.org/blog/2012/06/16/unit-testing-asp-dot-net-web-apiおよびその他のいくつかの投稿を参照しました。
WebAPIメソッドはここcodeplexにあります
編集
(UrlHelper)でvpdがnullになるように絞り込みました
IHttpVirtualPathData vpd = configuration.Routes.GetVirtualPath(
request: request,
name: routeName,
values: routeValues);
理由がわからないようですが?