Como evitar o HttpContext.Server.MapPath para fins de teste de unidade
Estou trabalhando em um aplicativo ASP.net MVC 5. Gostaria de testar a minha ação do controlador, que se parece com isso
public ActionResult Search()
{
var vm = SetupSearchViewModel();
return View(vm);
}
Todo o trabalho duro é feito peloSetupSearchViewModel()
, que em si é um orquestrador que chama muitos outros métodos diferentes, um dos quais é esse
private string ExtractJsonFile(string filename)
{
var filePath = HttpContext.Server.MapPath(filename);
var json = System.IO.File.ReadAllText(filePath);
return json;
}
Estou planejando fazer muitos testes de unidade nessa ação específica, mas estou começando com um teste de unidade muito simples que verifica se o tipo correto de ActionResult é retornado
[Test]
public void Search_Get_ReturnsViewResult()
{
// arrange
var performanceController = PerformanceControllerInstance;
// act
var result = performanceController.Search();
//assert
Assert.IsNotNull(result as ViewResult);
}
O teste está falhando devido aoExtractJsonFile
método. UsaHttpContext
e isso énull
. Estou usando o Rhino Mocks para zombar das várias classes.
Qual seria a melhor maneira de fazer o teste de unidade? Darin emesta discussão sugerimos que evitemosHttpContext.Current
se quisermos nosso código Unit Tested.
A propósito, tentei zombar do HttpContext e torná-lo não nulo, mas depois oServer
énull
, Posso ir em frente e zombar disso, suponho (ainda não sei), mas não há melhor maneira? Não tenho problema em refatorar grandes, se necessário.