c# - 未找到 Microsoft.Owin.Testing.TestServer 404

标签 c# asp.net integration-testing owin

当我向 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?那么,您创建一个继承自 DefaultAssembliesResolver 的类,然后覆盖 GetAssemblies()。在那里你加载你要测试的东西。这里有一篇关于如何执行此操作的好帖子: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”是您要测试的程序集名称(右键单击项目 -> 属性,它位于第一个选项卡的顶部)

这会让您越过障碍。

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

关于c# - 未找到 Microsoft.Owin.Testing.TestServer 404,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36508092/

相关文章:

php - 如何为使用 Braintree 和静态方法调用的端点编写集成测试

c# - 使用具有字符串属性的对象进行更快的集合搜索

c# - 在 .NET 中使用正则表达式拆分字符串

c# - 如何将数据插入到 asp.net 中现有的 xml 文件中?

c# - 使用 Azure AD 的 Azure API APP 身份验证

java - 我如何模拟 ApplicationRunner bean,以便 ApplicationContext 加载这个模拟的 ApplicationRunner Bean

java - 使用 spark 服务器进行集成测试

c# - 如何在代码中的 TextBlock 中添加超链接?

c# - 从两个列表中计算所有可能的项目对?

c# - 在代码隐藏中向 GridView 添加 CSS