Eu tenho uma função em um controlador que estou testando unidade que espera valores no cabeçalho da solicitação http. Não consigo inicializar o HttpContext porque ele é somente leitura.
Minha função de controlador espera um valor de cabeçalho de solicitação http para "device-id"
[TestMethod]
public void TestValuesController()
{
ValuesController controller = new ValuesController();
//not valid controller.HttpContext is readonly
//controller.HttpContext = new DefaultHttpContext();
var result = controller.Get();
Assert.AreEqual(result.Count(), 2);
}
Existe uma maneira direta de fazer isso sem usar uma biblioteca de terceiros?
c#
asp.net-mvc
unit-testing
asp.net-core
James Wierzba
fonte
fonte
Respostas:
Consegui inicializar o httpcontext e o cabeçalho desta maneira:
fonte
Em vez de zombar do HTTPContext, provavelmente é uma ideia melhor mapear o cabeçalho em um parâmetro no método. Por exemplo, no controlador na parte inferior desta resposta, o
id
parâmetro é definido como o cabeçalho do valor com um nome igual a "id do dispositivo" ... O teste de unidade então se tornaEmbora você possa zombar do HttpContext, na minha opinião é algo que deve ser evitado, a menos que você não tenha escolha. A documentação para FromHeaderAttribute pode ser encontrada aqui FromHeaderAttribute Class .
fonte