Mocking Request.UserHostAddress для модульного тестирования для WEB API - PullRequest
0 голосов
/ 09 января 2019

Я пишу модульный тест для моей службы WEB API. Я хочу издеваться над запросом с IP-адреса. Я использую Microsoft Unit Test.

[TestClass]
public class UnitTest1
{
    private Mock<HttpContextBase> moqContext;
    private Mock<HttpRequestBase> moqRequest;

    [TestMethod()]
    public void TestMethod1()
    {
       var controller = new TestController();
        controller.ControllerContext = new ControllerContext(moqContext.Object, new System.Web.Routing.RouteData(), controller);

    }
    [TestInitialize]
    public void SetupTests()
    {
        // Setup Moq
        moqContext = new Mock<HttpContextBase>();
        moqRequest = new Mock<HttpRequestBase>();
        moqContext.Setup(x => x.Request).Returns(moqRequest.Object);
        moqContext.Setup(x => x.Request.UserHostAddress).Returns("192.111.1.1");
    }

}

Я не знаю, как действовать дальше, я получаю ошибку ниже.

> Severity  Code    Description Project File    Line    Suppression State
> Error CS1503  Argument 3: cannot convert from
> 'WebApplication1.Controllers.TestController' to
> 'System.Web.Mvc.ControllerBase'   UnitTestProject1

Любая помощь приветствуется. MOQ лучше, чем Rino, также альтернативные способы избежать виртуальных методов для тестирования MOQ.

Обновление Итак, Контроллер является Контроллером API следующим образом

// GET: api/Test
        public IEnumerable<string> Get()
        {
            string s =HttpContext.Current.Request.UserHostAddress;
             ...Authentication/Authorization based on IP address
            return new string[] { s };
        }

Я хочу смоделировать HttpContext.Current.Request.UserHostAddress в моем модульном тесте, чтобы проверить другой IP-адрес. Мой вопрос, как установить макет IP-адреса. Я нашел ссылку https://blog.slatner.com/geeky/mocking-request-userhostaddress-in-asp-net-mvc.html., но я не мог понять, как использовать. Любая помощь высоко ценится.

1 Ответ

0 голосов
/ 09 января 2019

Это означает, что ваш TestController класс не наследуется от System.Web.Mvc.ControllerBase. Итак, вернитесь к определению вашего TestController и убедитесь, что оно выглядит как

public class TestController: System.Web.Mvc.ControllerBase
{ /* your code here */ }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...