2016-04-08 19 views
3

Wenn ich Anfrage an TestServer erhalte, bekomme ich 404 Antwort. Und ich kann nicht verstehen, warum, weil ich die gleiche Konfiguration für den normalen Server verwende und es funktioniert. Um Anfragen zu stellen, benutze ich TestServer.HttpClient.Microsoft.Owin.Testing.TestServer 404 nicht gefunden

+0

Hat Ihre normale Site auch System.Web-Inhalte (z. B. MVC)? TestServer funktioniert nur für die OWIN-Komponenten. – Tratcher

+1

@Tratcher Ja, mein normaler Server hat Controller, aber der Testserver "sieht" sie nicht –

+0

Haben Sie das jemals herausgefunden? Ich stoße auf dasselbe Problem. –

Antwort

4

Für mich war es, dass mein Test nicht wusste, was es getestet wurde. Ich dachte, es sei gut genug, um die WebApiConfig des Projekts mit dem Test zu teilen, aber es gibt nur leere Routing-Informationen. Es sagt dem Test nicht, was er testen soll. Es geht also nur um http://localhost/api/controller/action und eine 404 die gleiche wie wenn Sie es jetzt in Ihrem Browser versucht.

Es gibt fast nichts, wie man diese fehlende Verbindung herstellen kann. Der nächste ist http://www.juliencorioland.net/archives/using-owin-to-test-your-web-api-controllers, aber es gloss über den wichtigsten Teil - wie man dem Test was zu testen!

Der Beispielcode sieht wie folgt aus etwas:

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

}

Was ist das TestWebApiResolver? Nun, Sie machen eine Klasse, die von DefaultAssembliesResolver erbt und dann überschreiben GetAssemblies(). Dort laden Sie das, was Sie testen wollen. Es gibt einen guten Beitrag, wie Sie dies hier tun: http://www.strathweb.com/2013/08/customizing-controller-discovery-in-asp-net-web-api/

von dort die guten Sachen Copypasting, Überschreibung wie folgt aussehen wird:

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; 
    } 
} 

... where ‚MyAssembly‘ der Assemblierung-Name ist der Sache, die du versuchst zu testen (Rechtsklick auf das Projekt -> Eigenschaften, es ist oben auf der ersten Registerkarte)

Das bringt dich über diese Hürde.

Die zweite Hürde machte das Testen auf diese Weise zu einem Deal-Breaker für mich. Ich hatte schließlich eine 404-Antwort, jetzt war es eine 500. Ich wusste, dass ich die URLs richtig hatte, weil sie leicht geändert 404 wieder gemacht wurden. Das Problem ist, dass es keine Möglichkeit gibt, das zu debuggen. Da Sie nur auf die Assembly verweisen, die Sie testen, können Sie nicht darauf zugreifen und Breakpoints setzen und was nicht. Was nützt ein Test, der dir nicht sagen kann, warum er versagt? Besonders ärgerlich ist, dass es in IIS gut funktioniert hat. Daher habe ich das Vertrauen verloren, dass dies eine gute Simulation dafür ist, wie mein Code in der Wildnis laufen wird.