2016-11-21 2 views
0

Я пишу модульный тест с использованием Owin Test Server, но он не ведет себя так, как я ожидаю. Я не могу понять, что я делаю неправильно. Я ожидаю, что код состояния будет изменен, как я делаю на последнем этапе конвейера owin, но он не вступает в силу, и, следовательно, второе утверждение терпит неудачу.Owin Middleware не изменяет статус ответа с помощью тестового сервера

using Owin; 
using Microsoft.Owin; 
using Microsoft.Owin.Testing; 
using System; 
using System.Linq; 
using System.Net; 
using System.Net.Http; 
using System.Threading.Tasks; 
using Xunit; 

namespace My.Namespace 
{ 
    [Trait("Category", "Test Category")] 
    public class WhenIMakeWebRequest 
    { 
     [Fact] 
     public async void IGetUnauthorizedError() 
     { 
      using (var server = TestServer.Create(app => 
      { 
       app.Use((context, next) => 
       { 
        return next().ContinueWith(task => 
        { 
         context.Response.WriteAsync(" Now Changing Status Code"); 
         context.Response.StatusCode = (int)HttpStatusCode.Unauthorized; 
        }); 
       }); 
       app.Run(async context => 
       { 
        await context.Response.WriteAsync("Hello world using OWIN TestServer."); 
       }); 
      })) 
      { 
       var response = await server.CreateRequest("/Welcome").GetAsync(); 
       var result = await response.Content.ReadAsStringAsync(); 
       Assert.Equal(result, "Hello world using OWIN TestServer. Now Changing Status Code"); 
       Assert.Equal(response.StatusCode, System.Net.HttpStatusCode.Unauthorized); 
      } 

     } 
    } 
} 

ответ

0

Обнаружил ответ. На самом деле, заголовки не могут быть установлены после того, как контент в теле уже выписан. Поэтому мне нужно буферировать вывод, чтобы установить заголовки.

+0

Или подключить событие OnSendingHeaders – Tratcher

Смежные вопросы