我想对如下方法进行单元测试:
public ActionResult StoreFile(FormCollection form, string _paginaAtual)
{
Session["MySession"] = 1
if (Request.Files["uploadedFiles"] != null)
{
//do something about the file
}
return View()
}
它在我的“SomeController.cs” Controller 类中,当用户以简单的输入类型 ="file"HTML 输入提交文件时调用它。
P.S.:纯粹主义者当心:我知道这不是“纯粹的”单元测试,我只是想在测试环境中调用该方法并检查它是否在系统中进行了所需的更改。
谢谢大家对这个主题的任何启发, 山猫。
最佳答案
幸运的是,ASP.Net 团队在开始使用 MVC 并创建 System.Web.Abstractions 命名空间之前就考虑到了这一点。它是一系列基类,反射(reflect)了传统上无法测试的静态类,如 HttpWebRequest 类。
您要做的是依赖其中一个基类并进行一些依赖注入(inject),以便有效地模拟您的 session 。
HttpSessionStateBase _session;
public HttpSessionStateBase Session
{
get{
return _session ?? (_session = new HttpSessionStateWrapper(HttpContext.Current.Session));
}
set{
_session = value;
}
}
至于 FormCollection,您不必模拟它,因为您应该能够在 HttpContext 之外创建一个。在 Marcus Hammarberg's blog 上有一个很好的例子.
关于c# - 如何对接收 FormCollection 以上传文件的方法进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2327263/