簡體   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