【发布时间】:2016-11-22 00:09:57
【问题描述】:
我正在使用 ASP.net MVC 5 应用程序。我想对我的控制器动作进行单元测试,看起来像这样
public ActionResult Search()
{
var vm = SetupSearchViewModel();
return View(vm);
}
所有繁重的工作都由SetupSearchViewModel() 方法完成,它本身就是一个编排器调用许多不同的其他方法,其中一个就是this
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 来模拟各种类。
对此进行单元测试的最佳方法是什么? this thread 中的 Darin 建议我们避免使用 HttpContext.Current,如果我们希望我们的代码经过单元测试。
顺便说一句,我尝试模拟 HttpContext 并使其不为空,但是 Server 是 null,我想我也可以继续模拟(我还不知道如何),但是没有更好的办法吗?如果需要,我可以进行重大重构。
【问题讨论】:
标签: c# asp.net unit-testing asp.net-mvc-5 rhino-mocks