1

我们正在努力为我们的 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。我不明白这段代码如何知道在哪里可以找到控制器并将其连接起来。

4

1 回答 1

0

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

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

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

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

于 2014-06-10T11:42:58.760 回答