gpt4 book ai didi

c# - 使用 IPrincipal 集对 ASP.net Web API 进行单元测试

转载 作者:太空宇宙 更新时间:2023-11-03 16:05:30 28 4
gpt4 key购买 nike

我正在尝试对 Web API Controller 进行单元测试。以前在对标准 MVC Controller 进行单元测试时,我已经能够模拟 HTTPContext/Request/User 并通过设置 Controller 上下文来插入它们。然而,这不适用于 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);
}

关于c# - 使用 IPrincipal 集对 ASP.net Web API 进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19670520/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com