У меня есть Web API в .Net Core 2.2, как показано ниже:
[Authorize]
[Route("api/[controller]")]
[ApiController]
public class SomeController : ControllerBase
{
[HttpPost]
public async Task<string> SomeMethodPost()
{
string returnUrl = $"{this.Request.Scheme}://{this.Request.Host}{this.Request.PathBase}/some/redirect";
//Some Third Part Service Call
return serviceResult;
}
}
Я хочу смоделировать свойства «Схема», «Хост» и «PathBase» для действия моего контроллера в модульном тесте. ,Мне удалось написать следующий код в моем методе модульного теста:
var request = new Mock<HttpRequest>(MockBehavior.Strict);
request.Setup(x => x.Scheme).Returns("http");
request.Setup(x => x.Host).Returns(HostString.FromUriComponent("http://localhost:8080"));
request.Setup(x => x.PathBase).Returns(PathString.FromUriComponent("/api"));
var mockHttp = new Mock<ControllerBase>(MockBehavior.Strict);
mockHttp.SetupGet(x => x.Request).Returns(request.Object);
Однако, макет в последней строке вызывает исключение, так как "Request
" из "ControllerBase
" не может быть переопределено. Я понимаю ограничение не виртуальных свойств абстрактных классов. Есть ли обходной путь для этого?
Версия Moq - 4.13.0.