Я привык тестировать веб-контроллеры на 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?