Как добавить пользовательский заголовок и токен для HttpRequest в Mock Test для функции Azure - PullRequest
1 голос
/ 01 октября 2019

Я пишу Unit Test для Function App, который принимает 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);

Вызовследующая функция

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

Я получаю ошибку здесь. Оператор == не может быть применен к IHeaderDictionary и HttpRequestHeaders

&& _.Headers == headers

1 Ответ

1 голос
/ 01 октября 2019

Поскольку с использованием 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>();
...