【问题标题】:ASP.net WebAPI With WebAPI.Testing FrameworkASP.net Web API 与 Web API.Testing 框架
【发布时间】:2013-10-26 08:47:01
【问题描述】:

我们正在努力为我们的 API 调用设置自动化单元测试。我们的解决方案中有两个项目。一个是 ASP.net WebAPI 项目,另一个是 Microsoft Test 项目。

诚然,我们是自动化单元测试的新手,但了解基本概念。似乎有一些用于测试 ASP.net WebAPI 项目的开源工具和框架。我们目前正在使用WebAPI.Testing 框架。除了自述文件之外,基本上没有任何文档。根据自述文件,使用该工具非常简单直接,但它不适合我们。

这是我们的测试方法:

[TestMethod]
public void TestMethod1()
{
    var config = new HttpConfiguration();

    config.Routes.MapHttpRoute(
        name: "DefaultApi",
        routeTemplate: "api/{controller}/{id}",
        defaults: new { id = RouteParameter.Optional }
    );

    Browser browser = new Browser(config);

    var response = browser.Get("/api/activities/", (with) =>
    {
        with.Header(SessionIdHeaderKeyName, "e999e767-5b63-4cc0-b2be-34842eb3adf0");
        with.Header("Accept", "application/json");
        with.HttpRequest();
    });

    Assert.Equals(HttpStatusCode.OK, response.StatusCode);
}

我们选择这个框架是因为它允许我们在调用请求之前设置标头。代码执行得很好,没有任何异常,但是我们得到的只是 404 Not Found,不管我们在路径 (/api/activities) 中指定了什么。老实说,我根本不明白这是如何工作的,因为似乎没有任何对我的 WebAPI 项目的引用。那么测试框架怎么可能知道路由“/api/activities”解析到什么,甚至在哪里可以找到相应的控制器。

有没有人对这个或其他框架有任何经验可以测试我们的 ASP.net WebAPI 控制器并允许我们在请求之前设置标头?

谁能告诉我我在这里做错了什么?

我给 WebAPI.Testing 框架的作者发了电子邮件,他很友好地回复并告诉我需要包含对我的 API 项目的引用(“您的测试项目将需要引用您的 API 项目,然后希望它会找到路线。”)。但是,简单地在我的测试项目中添加对我的 WebAPI 项目的引用并没有帮助。如果其他人有任何建议,我将不胜感激。

我在我的测试项目中包含了对我的 WebAPI 项目的引用。我还更新了代码以包含 HttpConfiguration 设置。我已经验证了路由路径和控制器动作是正确的。但是,当我运行测试时,我仍然得到 404。我不明白这段代码如何知道在哪里找到控制器并将其连接起来。

【问题讨论】:

    标签: asp.net-mvc unit-testing asp.net-mvc-4 asp.net-web-api


    【解决方案1】:

    我认为发现 WebApi 类正在进行一些反思......

    包括对您的 WebAPI 项目的引用。

    然后确保测试项目使用 WebAPI 项目中的某些内容 - 将这些 webApi 加载到内存中...

    例如私有 Application.Web.Controllers.ServiceController tp = null;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-06
      相关资源
      最近更新 更多