首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >找不到Microsoft.Owin.Testing.TestServer 404

找不到Microsoft.Owin.Testing.TestServer 404
EN

Stack Overflow用户
提问于 2016-04-08 19:45:18
回答 1查看 2.3K关注 0票数 6

当我向TestServer提出请求时,我会得到404个响应。我不明白为什么,因为我对普通服务器使用相同的配置,而且它可以工作。对于请求,我使用TestServer.HttpClient。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-25 04:00:59

对我来说,是因为我的测试不知道它测试的内容。我认为它足够好,可以与测试共享项目的WebApiConfig,但所做的只是提供空的路由信息。它不能告诉测试它应该测试什么。因此,它只是出去到http://localhost/api/controller/action,得到一个404,就像你现在在浏览器中尝试了一样。

关于如何建立这个缺失的连接几乎什么都没有。最接近的是http://www.juliencorioland.net/archives/using-owin-to-test-your-web-api-controllers,但是它掩盖了最重要的部分--如何告诉测试要测试什么!

示例代码如下所示:

代码语言:javascript
复制
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()。在那里你加载了你想要测试的东西。这里有一篇关于如何做到这一点的很好的文章:http://www.strathweb.com/2013/08/customizing-controller-discovery-in-asp-net-web-api/

从那里复制好的内容,您的覆盖将如下所示:

代码语言:javascript
复制
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‘是您要测试的东西的程序集名称(右键单击项目->属性,它位于第一个选项卡的顶部)

这能让你跨过那个障碍。

第二个障碍使这样的测试对我来说成了破坏交易的因素。我终于得到了一个非404的回复,现在是500。我知道我的URL是正确的,因为稍微改变它们会使它们再次变成404。问题是没有办法去调试它。因为您只是在引用正在测试的程序集,所以没有办法进入它并设置断点等等。一个不能告诉你为什么会失败的测试有什么用?尤其令人讨厌的是,它在IIS中工作得很好。所以我不再相信这是我的代码将如何在野外运行的一个很好的模拟。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36508092

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档