Как указал Алуан Хаддад в комментариях, этот Problem()
вызывает ProblemDetailsFactory
для создания ProblemDetails
объектов, которые предоставляются менеджером служб. Диспетчер служб работает только тогда, когда приложение запущено: https://github.com/dotnet/aspnetcore/blob/master/src/Mvc/Mvc.Core/src/ControllerBase.cs#L194
Переменная ControllerBase.ProblemDetailsFactory
может быть установлена, поэтому я создал макет ProblemDetailsFactory
и установил фабрику контроллеров на экземпляр моего макета. Кажется, это заставляет его работать.
Mock:
public class MockProblemDetailsFactory : ProblemDetailsFactory
{
public MockProblemDetailsFactory()
{
}
public override ProblemDetails CreateProblemDetails(HttpContext httpContext,
int? statusCode = default, string title = default,
string type = default, string detail = default, string instance = default)
{
return new ProblemDetails() {
Detail = detail,
Instance = instance,
Status = statusCode,
Title = title,
Type = type,
};
}
public override ValidationProblemDetails CreateValidationProblemDetails(HttpContext httpContext,
ModelStateDictionary modelStateDictionary, int? statusCode = default,
string title = default, string type = default, string detail = default,
string instance = default)
{
return new ValidationProblemDetails(new Dictionary<string, string[]>()) {
Detail = detail,
Instance = instance,
Status = statusCode,
Title = title,
Type = type,
};
}
}
Я добавил эту строку в настройку для этого модульного теста, и она решает проблему.
_patientController.ProblemDetailsFactory = new MockProblemDetailsFactory();