ASP.net 具有 IPrincipal 集的 Web API 进行单元测试
本文关键字:API 单元测试 Web 集的 net 具有 IPrincipal ASP | 更新日期: 2023-09-27 18:37:19
我正在尝试对Web API控制器进行单元测试。以前,在对标准MVC控制器进行单元测试时,我已经能够模拟HTTPContext/Request/User并通过设置控制器上下文来插入它们。但是,这不适用于Web API Controller(ControllerContext的构造函数显然不接受Web API)。
到目前为止,我有以下内容来设置请求对象。
HttpConfiguration configuration = new HttpConfiguration();
HttpRequestMessage request = new HttpRequestMessage();
controller.Request = request;
controller.Request.Properties["MS_HttpConfiguration"] = configuration;
这工作正常,并且请求对象可用。但是,我找不到任何设置主体用户的方法。我尝试了以下方法
Thread.CurrentPrincipal = //Set User
HttpContext.Current = //Set User
这两者似乎都不起作用。
在较新版本的 Web api 中,您可以直接在 ApiController
像这样一样设置用户
[TestMethod]
public void GetReturnsProduct()
{
// Arrange
var username = "username@example.com"
var user = new ClaimsPrincipal(new CustomIdentity(username));
var controller = new ProductsController(repository);
controller.Request = new HttpRequestMessage();
controller.Configuration = new HttpConfiguration();
controller.User = user;
// Act
var response = controller.Get(10);
// Assert
Product product;
Assert.IsTrue(response.TryGetContentValue<Product>(out product));
Assert.AreEqual(10, product.Id);
}