我有一个 .net core 的 Web API(见下面的代码)。我正在使用 Polly 重试策略(见下面的策略)。我想对端点(getProducts)进行单元测试并测试 Polly 重试。
我找到了这些示例,但不清楚如何对端点和重试策略进行单元测试?
.Net Core API:
我找到了这些示例,但不清楚如何对端点和重试策略进行单元测试?
services
.AddHttpClient<IProductService, ProductService>()
.AddPolicyHandler(GetRetryPolicy(3, 2));
static IAsyncPolicy<HttpResponseMessage> GetRetryPolicy(int retryCount, int breakDuration)
{
return HttpPolicyExtensions
.HandleTransientHttpError()
.OrResult(msg => msg.StatusCode == System.Net.HttpStatusCode.NotFound)
.WaitAndRetryAsync(retryCount, retryAttempt => TimeSpan.FromSeconds(Math.Pow(breakDuration,
retryAttempt)));
}
.Net Core API:
public interface IProductService
{
Task<IEnumerable<ProductResponse>> GetProducts(string productType);
}
public class ProductService: IProductService
{
private readonly HttpClient _httpClient;
public ProductService(HttpClient httpClient)
{
_httpClient = httpClient;
}
public async Task<IEnumerable<ProductResponse>> GetProducts(string productType)
{
var response = await _httpClient.GetAsync("uri");
...
}
}
retryPolicy.Policy.ExecuteAsync(async () => await client.GetAsync("uri"))
来执行操作。您可以模拟 HTTP 端以按顺序响应 HTTP 状态码,并捕获请求正文以测试它发送的次数是否符合预期。 - mishal153