Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用单元测试来测试我的API';身份验证和授权?_C#_Unit Testing_Asp.net Web Api - Fatal编程技术网

C# 如何使用单元测试来测试我的API';身份验证和授权?

C# 如何使用单元测试来测试我的API';身份验证和授权?,c#,unit-testing,asp.net-web-api,C#,Unit Testing,Asp.net Web Api,一位同事编写了一个HTTP API。他使用实现基本HTTP授权的DelegatingHandler实现了安全性 他添加了一个路由配置,将BasicAuthHandler应用于全局配置中的API路由: config.Routes.MapHttpRoute( name: "Api", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional }, const

一位同事编写了一个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测试不能正常工作时,有什么原因吗?有什么方法可以测试安全性吗?

原因是,当您通过浏览器测试应用程序时,您的网站在IIS中运行。IIS创建管道并通过所有处理程序路由请求

当您对应用程序进行单元测试时,它在单元测试上下文中运行(作为普通程序集)。这意味着没有管道,模块也不会像在IIS中那样加载


防止这种情况发生的唯一方法是创建一个集成测试并从外部测试应用程序

这可能解释了我一直得到的“internalservererror”的原因。我就靠邮递员了。谢谢