Все отлично подходит для моего проекта, когда я повторяю шаги в статье, включая тестирование API через Restlet. Тем не менее, я пытаюсь использовать разработку тестового управления (TDD) для этого проекта, и в идеале я хотел бы проверить, что все работает в моих тестах, включая обработчик проверки токенов. Я могу проверить свои контроллеры, если я позвоню им непосредственно в своих модульных тестах, но это обходит фактический обработчик проверки токенов. Итак, я попытался использовать самостоятельный HTTP для правильного использования полного API, включая всю логику обработчика проверки токенов. Вот мой полный модульный тест, чтобы получить токен, а затем передать токен второй метод, требующий авторизации: < /p>
Код: Выделить всё
[TestMethod]
public void GetAuthorizedStatus_SelfHostedHTTP()
{
HttpServer server = TestAPIHelper.GenerateTestServer();
using (HttpMessageInvoker client = new HttpMessageInvoker(server))
{
string token = string.Empty;
using (HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, loginURL))
{
var stringContent = new StringContent(JsonConvert.SerializeObject(TestAPIHelper.loginObject), Encoding.UTF8, "application/json");
request.Content = stringContent;
using (HttpResponseMessage response = client.SendAsync(request, System.Threading.CancellationToken.None).Result)
{
Assert.AreEqual(HttpStatusCode.OK, response.StatusCode, "Error getting token from login portion");
token = response.Content.ReadAsAsync().Result;
Assert.IsTrue(token.Length > 50);
}
}
using (HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, authorizedStatusURL))
{
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", token);
using (HttpResponseMessage response = client.SendAsync(request, System.Threading.CancellationToken.None).Result)
{
Assert.AreEqual(HttpStatusCode.OK, response.StatusCode, "Error getting status from Authenticated portion.");
}
}
};
}
Thread.CurrentPrincipal = handler.ValidateToken(token, validationParameters, out securityToken);
HttpContext.Current.User = handler.ValidateToken(token, validationParameters, out securityToken);
< /code>
Я не понимаю, что вызывает только вторую строку, когда первая, почти идентичная строка работает - обе строки называют один и тот же метод. И я не понимаю, почему это работает со сторонним программным обеспечением, но не работает с моим тестовым кодом - я обеспокоен тем, что если я не выясню это для модульного тестирования, то я не получаю код, работающий на Реальное приложение, вызывая этот API. Я предполагаю, что это либо какая -то тривиальная настройка в моем тестовом коде, которую мне нужно добавить в свой запрос перед отправкой. Но, возможно, мне нужно архитектировать совершенно другой метод вызова API в моих модульных тестах.
Подробнее здесь: https://stackoverflow.com/questions/513 ... th-web-api
Мобильная версия