NUnitを使用してテストを設定して、ASP.NET WebApiコントローラの統合テストを実行しようとしています。私は、HttpServerを使ったIn-Memoryホスティングについて議論している記事をいくつか見つけました.HttpServerは、すべてをホスティングするWebサーバーを必要としないことを単純化するようです。 NUnitを使用してASP.NET WebApiコントローラとの統合テストを実行する
-
は私が今まで見つから404-されていない得るだけで応答です。
コントローラは、ブラウザまたはFiddlerを使用して手動でテストしたときに機能しています。ルート定義は作業現場からコピーされました。テストプロジェクトによってapiプロジェクトが参照され、dllがテストと同じフォルダにコピーされています。
ありがとうございます。
はここでテストクラスが
[TestFixture]
public class InMemoryTests
{
private HttpServer Server;
private string UrlBase = "http://some.server/";
[TestFixtureSetUp]
public void Setup()
{
var config = new HttpConfiguration();
config.Routes.MapHttpRoute(name: "Default", routeTemplate: "api/{controller}/{action}/{id}", defaults: new { id = RouteParameter.Optional });
config.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always;
Server = new HttpServer(config);
}
[Test]
public void GetOrderStatus()
{
var client = new HttpClient(Server);
var request = createRequest("api/Orders/GetOrderStatus?companyCode=001&orderNumber=1234", "application/json", HttpMethod.Get);
using (HttpResponseMessage response = client.SendAsync(request).Result)
{
Assert.IsNotNull(response);
Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);
Assert.NotNull(response.Content);
}
}
private HttpRequestMessage createRequest(string url, string mthv, HttpMethod method)
{
var request = new HttpRequestMessage();
request.RequestUri = new Uri(UrlBase + url);
request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue(mthv));
request.Method = method;
return request;
}
private HttpRequestMessage createRequest<T>(string url, string mthv, HttpMethod method, T content, MediaTypeFormatter formatter) where T : class
{
HttpRequestMessage request = createRequest(url, mthv, method);
request.Content = new ObjectContent<T>(content, formatter);
return request;
}
public void Dispose()
{
if (Server != null)
{
Server.Dispose();
}
}
}
:で
詳細情報 - :このことを確認するために
はあなたの問題は/一時的な回避策テストの最初の行として追加されます。コントローラーを見ずに言うのは難しい。/api/Orders/GetOrderStatus?companyCode = 001&orderNumber = 1234このアクションの定義を投稿できますか? –
コントローラーは本当に特別なものはありません。手動でテストする場合はすべて動作します。また、どのコントローラをテストしても同じ結果が得られます。 – Rick