Net Core:具有通用 Class T 和参数的 Moq 方法

Net Core: Moq Method with Generic Class T and Parameters

我正在尝试对下面的这种方法进行最小起订量。我将如何使用通用 Class 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..

资源:

Mocking generic method call for any given type parameter

您需要在设置中为 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(), "");