ASP.net WebAPI使用WebAPI.Testing Framework

时间:2013-10-17 17:57:47

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

我们正在努力为我们的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);
}

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

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

有人可以告诉我这里可能做错了吗?

我通过电子邮件发送了WebAPI.Testing框架的作者,他非常友好地回应并告诉我,我需要包含对我的API项目的引用(“您的测试项目需要引用您的API项目,然后希望它会找到路线。“)。但是,只是在我的测试项目中添加对我的WebAPI项目的引用并没有帮助。如果其他人有任何建议,我将非常感谢他们。

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

1 个答案:

答案 0 :(得分:0)

我认为有一些反思可以发现WebApi类......

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

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

e.g。 private Application.Web.Controllers.ServiceController tp = null;