Integration testing your Polly policies with HttpClient Interception
Posted on Thursday, 30th July 2020
In my previous post I introduced HttpClientInterception, a hugely versatile .NET library that I’ve had great success with. In the post I demonstrated how you can use it to stub remote HTTP service dependencies within your application to ease testing. Towards the end of the post I demonstrated how it integrated with
IHttpClientFactory via the
IHttpMessageHandlerBuilderFilter interface, enabling you to apply additional
HttpMessageHandlers to your HttpClients generated via
In this post I want to go further by demonstrating how you can use this same approach to integration test your Polly policies and how they integrate with the
Note: If you haven’t read my previous post then I would recommend doing so as this post leans a lot on content discussed in it.
Integration testing your Polly policies with HttpClient
One of the more common approaches to configuring your Polly policies with an HttpClient is via the
This package builds onto of the
IHttpClientBuilder interface allowing you to chain Polly policies with the
AddPolicyHandler extension method, like so:
.AddPolicyHandler method takes an async Polly Policy and creates an
HttpMessageHandler that gets added to the
HttpClient message handler pipeline:
Integration testing a Polly Retry Policy
Using this same approach we can create our HttpClientInterception configuration, but this time use the
WithInterceptionCallback(Action<HttpRequestMessage> action) method, which gets executed after every matched request, to perform operations like count the number of retries made (this will include the initial request):
Hopefully this and the previous post have demonstrated just how versatile the HttpClientInterception can be, from stubbing simple requests from dependencies to integration testing Polly policies as I’ve demonstrated above.
Enjoy this post? Don't be a stranger!
Follow me on Twitter at @_josephwoodward and say Hi! I love to learn in the open, meet others in the community and talk Go, software engineering and distributed systems related topics.