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