2016-04-08 17 views
3

私がTestServerにリクエストをすると、私は404応答を取得します。そして、なぜ私は正常なサーバーのために同じ設定を使用し、それが動作する理由を理解できません。要求を行うために私はTestServer.HttpClientを使います。Microsoft.Owin.Testing.TestServer 404が見つかりません

+0

通常のサイトにもSystem.Webコンテンツ(MVCなど)がありますか? TestServerは、OWINコンポーネントでのみ動作します。 – Tratcher

+1

@Tratcherはい、私の通常のサーバーにはコントローラがありますが、TestServerはそれらを「見」ません –

+0

これを解明しましたか?私は同じ問題を抱えています。 –

答えて

4

私のテストでは、テストしていたものがわからないということでした。プロジェクトのWebApiConfigをテストと共有するだけで十分だと思いましたが、空のルーティング情報を与えるだけです。それはテストするものをテストに伝えません。だから、http://localhost/api/controller/actionに行って、ブラウザで試したのと同じように404を取得するだけです。

この欠落している接続を確立する方法はほとんどありません。一番近いのは http://www.juliencorioland.net/archives/using-owin-to-test-your-web-api-controllersですが、テストの内容をどのようにテストするかについては、最も重要な部分について説明します。

のコード例は、このようなものになります。

class OwinTestConf 
{ 
    public void Configuration(IAppBuilder app) 
    { 
HttpConfiguration config = new HttpConfiguration(); 
    config.Services.Replace(typeof(IAssembliesResolver), new TestWebApiResolver()); 
    config.MapHttpAttributeRoutes(); 
    app.UseWebApi(config); 
} 

}

をそのTestWebApiResolverは何ですか?さて、DefaultAssembliesResolverから継承したクラスを作成し、次にGetAssemblies()を上書きします。そこにテストしようとしているものがロードされます。ここでこれを行う方法の良い記事があります。そこから良いものをCopypasting http://www.strathweb.com/2013/08/customizing-controller-discovery-in-asp-net-web-api/

、あなたのオーバーライドは、このように見えるように起こっている:

public class MyAssembliesResolver : DefaultAssembliesResolver 
{ 
    public override ICollection<Assembly> GetAssemblies() 
{ 
    ICollection<Assembly> baseAssemblies = base.GetAssemblies(); 
    List<Assembly> assemblies = new List<Assembly>(baseAssemblies); 
    var controllersAssembly = Assembly.Load("MyAssembly"); 
    baseAssemblies.Add(controllersAssembly); 
    return assemblies; 
    } 
} 

...「MyAssemblyは、」アセンブリ名です(プロジェクトを右クリック - >プロパティ、それは最初のタブの上部にあります)

これは、そのハードルを乗り越えます。

第2のハードルは、このようにして私にとってデッドブレイカーをテストしました。私はついに404レスポンスを得ました。今は500でした。URLを変更したので、私はそれを少し変更したので、私は正しいと思っていました。問題はそれをデバッグする方法がないことです。テストしているアセンブリを参照しているだけなので、ブレークポイントを設定したり、ブレークポイントを設定したりすることはできません。なぜそれが失敗しているのか分からないテストは何ですか?特に厄介なことは、IISで正常に動作していることです。だから私はこれが私のコードが野生でどのように動くかの良いシミュレーションであるという信頼を失ってしまった。

関連する問題