簡體   English   中英

單元測試方法,其中擴展方法用於外部資源

[英]Unit Testing methods within which extension methods are used for external resources

我需要單元測試使用HttpClient和擴展方法RequestPasswordTokenAsync RequestToken方法。

即使將delegatingHandler傳遞給HttpClient我也有一個null引用異常。

var delegatingHandler = new DelegatingHandlerStub(false);
var httpClient = new HttpClient(delegatingHandler);

var tokenServices = new TokenServices(httpClient)
tokenServices.RequestToken(passwordTokenRequest);  //exception


 public class TokenServices : ITokenServices
    {
        private readonly HttpClient _httpClient;
        public TokenServices(HttpClient httpClient) 
        {
            _httpClient = httpClient;           
        }

            public async Task<TokenResponse> RequestToken(PasswordTokenRequest request)
        {           

            var response = await _httpClient.RequestPasswordTokenAsync(request);

            }

    }

     public class DelegatingHandlerStub : DelegatingHandler
    {
        private readonly Func<HttpRequestMessage, CancellationToken, Task<HttpResponseMessage>> _handlerFunc;
        public DelegatingHandlerStub(bool toThrowException)
        {
            _handlerFunc = (request, cancellationToken) =>
            {
                if (toThrowException)
                    throw new Exception();

                return Task.FromResult(request.CreateResponse(HttpStatusCode.OK));
            };

        }

        protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
        {
            return _handlerFunc(request, cancellationToken);
        }
    }


namespace IdentityModel.Client
{

    public static class HttpClientTokenRequestExtensions
    {
        public static Task<TokenResponse> RequestPasswordTokenAsync(this HttpMessageInvoker client, PasswordTokenRequest request, CancellationToken cancellationToken = default(CancellationToken));

    }
}           

我必須在HttpClient周圍寫一個包裝器。

如果有更好的解決方案,請在此處發布

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM