我们正在努力为我们的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。我不明白这段代码如何知道在哪里找到控制器并连接它。
答案 0 :(得分:0)
我认为有一些反思可以发现WebApi类......
包含对您的WebAPI项目的引用。
然后确保测试项目使用WebAPI项目中的内容 - 将这些webApi加载到内存中......
e.g。 private Application.Web.Controllers.ServiceController tp = null;