2016-04-08 28 views
3

TestServer'ı istediğimde 404 yanıt alıyorum. Ve nedenini anlayamıyorum, çünkü normal sunucu için aynı yapılandırmayı kullanıyorum ve çalışıyor. İstekte bulunmak için TestServer.HttpClient kullanıyorum.Microsoft.Owin.Testing.TestServer 404 bulunamadı

+0

Normal sitenizde System.Web içeriği var mı (ör. MVC)? TestServer sadece OWIN bileşenleri için çalışır. – Tratcher

+1

@Tratcher Evet, normal sunucumun denetleyicileri var, ancak TestServer onları "göremiyor" –

+0

Bunu hiç anladın mı? Aynı konuya koşuyorum. –

cevap

4

Benim için bu, testimin test ettiği şeyi bilmemesiydi. Projenin WebApiConfig'ını testle paylaşmanın yeterince iyi olduğunu düşündüm, ancak bunların hepsi boş yönlendirme bilgileri veriyor. Deneyi test etmesi gereken şeyi söylemiyor. Yani sadece http://localhost/api/controller/action'a çıkıyor ve şimdi tarayıcınızda denediğiniz gibi bir 404 elde ediyor.

Bu eksik bağlantının nasıl kurulacağı hakkında neredeyse hiçbir şey yoktur. En yakın olan http://www.juliencorioland.net/archives/using-owin-to-test-your-web-api-controllers, fakat en önemli parçadan geçer - testin neyi test edeceğini söyler!

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

}

o TestWebApiResolver nedir:

örnek kod şöyle görünür? Eh, DefaultAssembliesResolver'dan miras alan bir sınıf oluşturup GetAssemblies()'u geçersiz kılarsınız. Orada test etmeye çalıştığın şeyi yüklersin. http://www.strathweb.com/2013/08/customizing-controller-discovery-in-asp-net-web-api/

oradan iyi şeyler Copypasting senin kılma şu şekilde görünür olacak,: Burada bunun nasıl iyi bir mesaj var

'MyAssembly' montaj adıdır
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; 
    } 
} 

... test etmeye çalıştığınız şeyin (sağ tıklayarak proje -> özellikler, ilk sekmenin üstündedir)

Bu engelin üstesinden gelmenizi sağlar.

İkinci engel, bu şekilde benim için bir anlaşma yaptı. Sonunda 404 olmayan bir cevabım vardı, şimdi 500 yaşındaydım. URL'leri doğru anladığımı biliyordum, çünkü onları değiştirmek biraz daha 404 yaptı. Sorun şu ki, hata ayıklamanın bir yolu yok. Test ettiğin meclise atıfta bulunduğun için, ona adım atmanın ve sınırlarını belirlemenin ve yapmanın bir yolu yok. Size neden başarısız olduğunu söyleyemeyen bir test ne kadar iyi? Özellikle sinir bozucu, IIS'de iyi çalıştı. Bu yüzden, kodumun vahşi ortamda nasıl çalışacağına dair iyi bir simülasyon olduğuna dair güvenimi kaybettim.

İlgili konular