Я создал следующий веб-контроллер api специально для написания некоторых интеграционных тестов, которые будут проверять, что политики повтора и автоматического выключателя, которые я определил для HttpClient с помощью Polly.
Если я запускаю приложение и вручную вызываю конечную точку / polly с правильными аргументами, все работает нормально, но когда я запускаю свой интеграционный тест, выполняя то же самое, он терпит неудачу с 404.
Is есть какой-то особый случай с тестами интеграции ядра. net, когда одна конечная точка не может вызвать другую? Или какая-то конкретная переменная среды c, которую мне нужно отключить, чтобы управлять URL-адресом, как я делаю ниже для Docker?
В этом коде конечная точка / polly должна вызывать конечную точку / parrot, но Я получаю ошибку 404 not found при выполнении этого с помощью интеграционного теста.
Я пробовал установить относительный URL-адрес, например / api / errorsimulation / parrot? StatusCode = 502, но я все равно получаю 404 во время интеграции тест.
Мысли?
namespace MyApp.API.Controllers
{
[Produces("application/json")]
[Route("api/[controller]")]
[ApiController]
public class ErrorSimulationController : ControllerBase
{
private readonly ITestService _testService;
private bool InDocker { get { return Environment.GetEnvironmentVariable("DOTNET_RUNNING_IN_CONTAINER") == "true"; } }
public ErrorSimulationController(ITestService testService)
{
_testService = testService;
}
/// <summary>
/// Allows integration tests to test the various polly policies for retries and circuit breakers.
/// </summary>
/// <param name="statusCode">The status code to simulate during the http call.</param>
/// <returns>Task<ActionResult<System.Boolean>>.</returns>
[HttpPost]
[Route("polly")]
public async Task<ActionResult<HttpResponseMessage>> Polly(int statusCode)
{
var protocol = Request.IsHttps ? "https" : "http";
var host = Request.Host.ToString();
if (InDocker)
{
// don't include the port if in docker
host = Request.Host.Host;
}
var response = await _testService.Get($"{protocol}://{host}/api/errorsimulation/parrot?statusCode={statusCode}").ConfigureAwait(false);
return StatusCode((int)response.StatusCode);
}
/// <summary>
/// Returns the specified status code.
/// </summary>
/// <param name="statusCode">The status code.</param>
/// <returns>Task<ActionResult<HttpResponseMessage>>.</returns>
[HttpGet]
[Route("parrot")]
public async Task<ActionResult<HttpResponseMessage>> Parrot(int statusCode)
{
return StatusCode(statusCode);
}
}
}