找不到Microsoft.Owin.Testing.TestServer 404

当我向TestServer发出请求时,我得到了404响应。 我无法理解为什么,因为我使用相同的配置为普通服务器,它的工作原理。 为了发出请求,我使用了TestServer.HttpClient。

对我而言,我的测试不知道它正在测试的东西。 我认为与测试共享项目的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? 好吧,你创建一个inheritance自DefaultAssembliesResolver的类,然后重写GetAssemblies() 。 在那里你加载你想要测试的东西。 这里有一篇关于如何做到这一点的好文章: http : //www.strathweb.com/2013/08/customizing-controller-discovery-in-asp-net-web-api/

从那里复制好的东西,你的覆盖将看起来像这样:

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

…其中’MyAssembly’是您要测试的东西的程序集名称(右键单击项目 – >属性,它位于第一个选项卡的顶部)

这让你超越了这个障碍。

第二个障碍让我以这种方式进行测试。 我终于得到了一个非404响应,现在它是500.我知道我的URL是正确的,因为稍微更改它们会使它们再次成为404。 问题是没有办法调试它。 由于您只是引用正在测试的程序集,因此无法进入它并设置断点,而不是。 有什么不好的测试无法告诉你它为什么会失败? 特别恼人的是它在IIS中运行良好。 所以我不相信这是一个很好的模拟我的代码如何在野外运行。