C # - модульное тестирование контроллера WebApi - PullRequest
1 голос
/ 23 июня 2019

Я привык тестировать веб-контроллеры на Java, в которых реальный запрос отправляется на контроллер даже при модульном тестировании.

Когда дело доходит до C #, документ, который я вижу как здесь или здесь , кажется, проверяет рабочий процесс вызова для методов контроллера, но не весь рабочий поток сообщения http.

В частности, скажем, у меня есть следующий контроллер:

public class SessionController : ApiController
{
    [HttpDelete]
    [ResponseType(typeof(IHttpActionResult))]
    [Route("api/v1/sessions/{session-id}")]
    [ActionName("stop_session")]
    [ValidateModel]
    public IHttpActionResult StopSession([FromUri(Name = "session-id")] Guid sessionId)
    {
        Console.WriteLine($"Stopping session {sessionId}");

        SessionRepository.Instance.Remove(sessionId);

        return Ok();
    }
}

Если я создаю следующий модульный тест:

    [TestMethod]
    public void TestStopSession()
    {
        SessionController controller = new SessionController()
        {
            Request = new HttpRequestMessage
            {
                Method = HttpMethod.Get,
                RequestUri = new Uri("http://localhost:9000/api/v1/zada")
            }
        };
        controller.Configuration = new HttpConfiguration();

        var res = controller.StopSession(new Guid());

        Assert.IsInstanceOfType(res, typeof(OkResult));
    }

Как видите, в тесте я выставляю другой URL и даже другой метод, и все же модульное тестирование проходит успешно.

Как выполнить модульное тестирование всего рабочего процесса HTTP?

1 Ответ

0 голосов
/ 23 июня 2019

В этом случае вы тестируете устройство TestStopSession из SessionController, а не какую-либо маршрутизацию, проверку и т. Д. Я думаю, что это нормально для модульного теста, так как вам нужно протестировать один модуль одновременно.

Вы вызываете метод TestStopSession, поэтому здесь даже не происходит маршрутизация.

Как выполнить модульное тестирование всего рабочего процесса HTTP?

Тогда вам нужен тест интеграции или системы. Вы можете запустить HTTP-прослушиватель, а затем выполнить необработанный запрос.

Но имейте в виду, не пишите во многие интеграционные / системные тесты. Обязательно узнайте тестовую пирамиду

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...