在集成测试中以编程方式获取 ASP.NET 核心 API 版本

Get ASP.NET Core API version programmatically in integration test

我正在使用 ASP.NET Core 和 ASP.NET API Versioning 服务。

当我注册服务时,我使用这种格式:

services.AddVersionedApiExplorer(o => o.GroupNameFormat = "'v'VVV");

在集成测试中,使用 WebApplicationFactory:

var controller = nameof(CustomerController).Replace("Controller", "");
var action = nameof(CustomerController.SignIn);
var version = "v0";                                   // <------- the problem
var route = $"/api/${version}/${controller}/${action}";

var client = _factory.CreateClient();
var response = await client.GetAsync(route);

我不想硬编码 version。是否有可能以某种方式从测试服务器获取它?也许来自版本服务?

可以像这样从容器中检索:

var version = _factory
  .Services
  .GetRequiredService<IApiVersionDescriptionProvider>()
  .ApiVersionDescriptions
  .Single()    // if you have multiple versions, choose correct one
  .GroupName;