繁体   English   中英

如何在 Azure Function 的模拟测试中为 HttpRequest 添加自定义 header 和不记名令牌

[英]How to add custom header and bearer token for HttpRequest in Mock Test for Azure Function

我正在为 Function 应用程序编写单元测试,该应用程序接受 HttpRequest 并使用查询参数和一些自定义标头和承载令牌运行安全的 api 调用。 我能够将查询传递给请求但是如何添加标题不起作用。

我尝试了以下代码,根据@Nkosi 的建议编辑了我的代码

var postParam = new Dictionary<string, StringValues>();
postParam.Add("param1", "123");
request.Query = new QueryCollection(postParam);

var headers = new HttpClient().DefaultRequestHeaders;
headers.Add("Transaction", "1234");
var request = Mock.Of<HttpRequest>(_ =>
            _.Query == query && _.Headers == headers //<-- setup desired members
        );
var logger = Mock.Of<ILogger>();

var response = azureFunction.Run(request, logger);

调用如下 function

public static HttpResponseMessage Run(
        [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
        ILogger log){
}

我在这里遇到错误 operator == can't be applied to IHeaderDictionary 和 HttpRequestHeaders

&& _.Headers == headers

由于使用Linq-to-Mocks ,因此需要以不同方式完成设置

//Arrange
var postParam = new Dictionary<string, StringValues>();
postParam.Add("param1", "123");
var query = new QueryCollection(postParam);

var headers = new HttpRequestHeaders();
headers.Add("Transaction", "1234");

var request = Mock.Of<HttpRequest>(_ => 
    _.Query == query && _.Headers == headers //<-- setup desired members
);
var logger = Mock.Of<ILogger>();

//Act
var response = azureFunction.Run(request, logger);

//...

您也可以改为模拟IHeaderDictionary

//Arrange
var postParam = new Dictionary<string, StringValues>();
postParam.Add("param1", "123");
var query = new QueryCollection(postParam);

//mock header dictionary
var headers = Mock.Of<IHeaderDictionary>(_ =>
    _["Transaction"] == "1234"
);

var request = Mock.Of<HttpRequest>(_ => 
    _.Query == query && _.Headers == headers //<-- setup desired members
);
var logger = Mock.Of<ILogger>();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM