我正在ASP.net MVC 5應用程序中工作。我想單元測試我的控制器動作,看起來像這樣如何避免HttpContext.Server.MapPath用於單元測試目的
public ActionResult Search()
{
var vm = SetupSearchViewModel();
return View(vm);
}
所有的辛勤工作是由SetupSearchViewModel()
方法,它本身就是一個協調器調用許多不同的其他方法,其中之一就是這個
private string ExtractJsonFile(string filename)
{
var filePath = HttpContext.Server.MapPath(filename);
var json = System.IO.File.ReadAllText(filePath);
return json;
}
我打算在這個特別的動作做很多單元測試,但我開始有一個非常簡單的單元測試,檢查時返回的正確類型的ActionResult的
[Test]
public void Search_Get_ReturnsViewResult()
{
// arrange
var performanceController = PerformanceControllerInstance;
// act
var result = performanceController.Search();
//assert
Assert.IsNotNull(result as ViewResult);
}
由於ExtractJsonFile
方法的原因,測試失敗。它使用HttpContext
,那就是null
。我正在使用Rhino Mocks來模擬各種課程。
單元測試的最佳方式是什麼? Darin在this thread建議我們避免HttpContext.Current
,如果我們想要我們的代碼單元測試。
通過我試過的方式嘲諷的HttpContext,並使其不爲空,但隨後的Server
是null
,我可以繼續和模擬太我想(我不知道怎麼還沒有),但有沒有更好的辦法?如果需要進行重大重構,我沒有問題。