Net Core: метод Moq с общим классом T и параметрами - PullRequest
0 голосов
/ 19 сентября 2019

Я пытаюсь использовать этот метод ниже.Как бы я мог метод с универсальным классом T?Ниже приведен метод и в настоящее время предпринимается попытка решения:

Метод:

    public async Task<TV> HttpPost<T, TV>(string url, T prm, string accessToken = null)
    {
        try
        {
            if ((accessToken ?? "").Length > 0)
                _client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
            using (var result = await _client.PostAsJsonAsync(url, prm))
            {
                result.EnsureSuccessStatusCode();
                using (var content = result.Content)
                {
                    var ret = await content.ReadAsJsonAsync<TV>();
                    return ret;
                }
            }
        }
        catch (Exception ex)
        {
            var message = $"Url: {url}, Data: {JsonConvert.SerializeObject(prm)}";
            ex.Data["Url"] = message;
            throw;
        }
    }

Попытка:

        var mock = new Mock<HttpDataLayerUtilsAsync>();
        mock.Setup(b => b.HttpPost(It.IsAny<string>, It.IsAny <CustomDataModelRequest>).Returns..

Ресурс:

Обобщающий вызов метода для любого заданного параметра типа

1 Ответ

2 голосов
/ 19 сентября 2019

Вам необходимо предоставить общие аргументы для HttpPost в программе установки, например:

//                           T                         TV
.Setup(b => b.HttpPost<CustomDataModelRequest, CustomDataModelResponse>(
  It.IsAny<string>(), 
  It.IsAny<CustomDataModelRequest>(), 
  null))

, а также передать значение для необязательного параметра.

ДляReturn вы можете использовать:

.ReturnsAsync(new CustomDataModelResponse());

Тогда вы можете назвать это так:

var result = await mock.Object.HttpPost<CustomDataModelRequest, CustomDataModelResponse>("", new CustomDataModelRequest(), "");
...