使用 Owin 针对 WebApi 的 C# 单元测试项目
C# Unit Test project against WebApi with Owin
我的目标是 运行 在 Visual Studio 中针对我的网站 API 进行测试。我正在尝试调用控制器,正如我在网上看到的那样。
var controller = new PriceFeedController();
dynamic item = controller.Get(1, 1);
controller.Post(new PostPriceFeed { Item_Id = 1, Store_Id = 1, Price = decimal.Parse(item.pricefeed.price) + 10 });
dynamic itemprice_updated = controller.Get(1, 1);
Assert.AreEqual(decimal.Parse(item.pricefeed.price), decimal.Parse(itemprice_updated.pricefeed.price));
主要问题是关于 OWIN。我的控制器以这样的开头:
[HttpGet]
public IHttpActionResult Get(long storeId, long itemId)
{
//busco o id do usuário
var user_id = SessionState.GetUserIDByContext(Request.GetRequestContext());
//...
}
当我尝试 运行 测试时,Request
为空,我得到一个错误。
有人知道如何做我想做的教程吗?
编辑
@Peter 提示后,我可以插入一个请求,但我的声明不存在。
ClaimsPrincipal principal = httpRequestContext.Principal as ClaimsPrincipal;
return long.Parse(principal.Claims.Where(c => c.Type == "user_id").Single().Value);
"user_id" 不存在,但我正在传递令牌。
您可以在初始化期间显式设置控制器的请求属性。一旦控制器有一个请求,您就可以添加控制器操作可用的属性。
如果您使用请求属性进行身份验证,则需要更多步骤才能安全地处理(有关 API 令牌的示例,请参阅 Securing and securely calling Web API and [Authorize])
var controller = new PriceFeedController {Request = new HttpRequestMessage()};
controller.Request.Properties.Add(HttpPropertyKeys.HttpConfigurationKey,
new HttpConfiguration());
controller.Request.Properties.Add("sample_property",
"plaintext string to pass to Get() method on PriceFeed");
var result = controller.Get(100, 105);
我的目标是 运行 在 Visual Studio 中针对我的网站 API 进行测试。我正在尝试调用控制器,正如我在网上看到的那样。
var controller = new PriceFeedController();
dynamic item = controller.Get(1, 1);
controller.Post(new PostPriceFeed { Item_Id = 1, Store_Id = 1, Price = decimal.Parse(item.pricefeed.price) + 10 });
dynamic itemprice_updated = controller.Get(1, 1);
Assert.AreEqual(decimal.Parse(item.pricefeed.price), decimal.Parse(itemprice_updated.pricefeed.price));
主要问题是关于 OWIN。我的控制器以这样的开头:
[HttpGet]
public IHttpActionResult Get(long storeId, long itemId)
{
//busco o id do usuário
var user_id = SessionState.GetUserIDByContext(Request.GetRequestContext());
//...
}
当我尝试 运行 测试时,Request
为空,我得到一个错误。
有人知道如何做我想做的教程吗?
编辑
@Peter 提示后,我可以插入一个请求,但我的声明不存在。
ClaimsPrincipal principal = httpRequestContext.Principal as ClaimsPrincipal;
return long.Parse(principal.Claims.Where(c => c.Type == "user_id").Single().Value);
"user_id" 不存在,但我正在传递令牌。
您可以在初始化期间显式设置控制器的请求属性。一旦控制器有一个请求,您就可以添加控制器操作可用的属性。
如果您使用请求属性进行身份验证,则需要更多步骤才能安全地处理(有关 API 令牌的示例,请参阅 Securing and securely calling Web API and [Authorize])
var controller = new PriceFeedController {Request = new HttpRequestMessage()};
controller.Request.Properties.Add(HttpPropertyKeys.HttpConfigurationKey,
new HttpConfiguration());
controller.Request.Properties.Add("sample_property",
"plaintext string to pass to Get() method on PriceFeed");
var result = controller.Get(100, 105);