一位同事写了一篇HTTP API。他使用实现基本HTTP授权的DelegatingHandler实现了安全性。
他添加了一个路由配置,将BasicAuthHandler应用于全局配置中的API路由:
config.Routes.MapHttpRoute(
name: "Api",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional },
constraints: null,
handler: BasicAuthHandler
);
我写了一个单元测试来测试API调用:
[TestClass]
public class ApiControllerTest
{
private ApiRepository repo = new ApiTestRepository();
[TestMethod]
public void Get()
{
// Arrange
var config = new HttpConfiguration();
var request = new HttpRequestMessage(HttpMethod.Get, "http://localhost/api/driver/1");
var route = config.Routes.MapHttpRoute("Default", "api/{controller}/{id}");
ApiDriverController controller = new ApiDriverController(repo)
{
Request = request,
};
controller.Request.Properties[HttpPropertyKeys.HttpConfigurationKey] = config;
// Act
var Results = controller.Get(1);
// Assert
// ...
}
}
当我使用浏览器调用API时,它确实具有安全性。但是,API测试似乎并不需要它。
API测试是否有效的原因不应该?有没有办法测试安全性?
答案 0 :(得分:1)
原因是当您通过浏览器测试应用程序时,您的网站在IIS中运行。它是IIS,它创建管道并通过所有处理程序路由请求。
当您对应用程序进行单元测试时,它会在您的单元测试上下文中运行(作为普通程序集)。这意味着没有管道,并且模块没有像在IIS中那样加载。
您唯一能做的就是创建集成测试并从外部测试应用程序