如何在MVC单元测试类中模拟Request.Files[]?

2023-12-25

我想在 MVC 单元测试中测试控制器方法。 为了测试我的控制器方法,我需要一个长度为 1 的 Request.Files[] 集合。 我想模拟 Request.Files[] 因为我在控制器方法渲染的视图上使用了文件上传控件。 任何人都可以建议我如何在单元测试中模拟 request.file 集合。

谢谢, 卡皮尔


您没有提到您正在使用什么模拟框架,但以下是使用 Rhino Mocks 的方法:

控制器:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View(Request.Files.Count);
    }
}

单元测试:

[TestMethod]
public void SomeTest()
{
    // arrange
    var controller = new HomeController();
    var context = MockRepository.GenerateStub<HttpContextBase>();
    var request = MockRepository.GenerateStub<HttpRequestBase>();
    var files = MockRepository.GenerateStub<HttpFileCollectionBase>();
    context.Stub(x => x.Request).Return(request);
    files.Stub(x => x.Count).Return(5);
    request.Stub(x => x.Files).Return(files);
    controller.ControllerContext = new ControllerContext(context, new RouteData(), controller);


    // act
    var actual = controller.Index();

    // assert
    Assert.IsInstanceOfType(actual, typeof(ViewResult));
    var viewResult = actual as ViewResult;
    Assert.IsInstanceOfType(viewResult.ViewData.Model, typeof(int));
    Assert.AreEqual(5, viewResult.ViewData.Model);
}

备注:使用MVCContrib.TestHelper http://mvccontrib.codeplex.com/wikipage?title=TestHelper这个测试可以大大简化,特别是上下文模拟部分和断言:

[TestMethod]
public void SomeTest()
{
    // arrange
    var sut = new HomeController();
    InitializeController(sut);
    Files["test.txt"] = MockRepository.GenerateStub<HttpPostedFileBase>();

    // act
    var actual = sut.Index();

    // assert
    actual
        .AssertViewRendered()
        .WithViewData<int>()
        .ShouldBe(1);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在MVC单元测试类中模拟Request.Files[]? 的相关文章

  • FakeItEasy 代理方法调用实际实现

    我正在尝试将对假对象的调用代理到实际的实现 这样做的原因是我希望能够使用 Machine Specifications 的 WasToldTo 和 WhenToldTo 它们仅适用于接口类型的伪造 因此 我正在执行以下操作来代理对我的真实对
  • 将此 XML 反序列化为对象的最佳方法

    在我见过的与我的类似的其他示例中 有一个根节点 然后是一个数组节点 然后是一堆数组项 我的问题是 我的根节点is我的数组节点 所以我见过的示例似乎不适合我 而且我无法更改 XML 架构 这是 XML
  • C# 模拟接口与模拟类

    我是 net 中的最小起订量框架的新手 根据我的在线研究 似乎有两种方法可以使用这个框架 要么模拟接口 要么模拟具体类 似乎在嘲笑具体类时 只有virtual方法可以被嘲笑 就我而言 我只想模拟实现接口的类的几个方法 例如 如果我们有以下内
  • .NET 4.7.1 中的 ASP.NET MVC 5 razor 视图中参考 netstandard 2.0 类型

    NET 4 7 1 应该解决我们在引用时遇到的问题netstandard 2 0完整框架中的库 尽管存在一些持续且令人痛苦的 dll 冲突警告和相关问题 并且需要手动更新到 PackageReferences 看看这个精彩的扩展 https
  • 单元测试内存泄漏

    我有一个应用程序存在大量内存泄漏 例如 如果打开一个视图并关闭它 10 次 我的内存消耗会增加 因为视图没有完全清理 这些是我的内存泄漏 从测试驱动的角度来看 我想编写一个测试来证明我的泄漏 并 在修复泄漏之后 断言我修复了它 这样我的代码
  • 使用 Laravel dusk 仅迁移一次

    根据到 数据库测试 文档 https laravel com docs 5 4 database testing resetting the database after each test我可以在每次测试后重置数据库 第一个选项 第二个选
  • JQuery Ajax 和将多个复杂对象发布到 asp.net MVC 控制器

    您好 将多个参数发布到 mc 控制器方法时出现问题 controller HttpPost public ActionResult SaveSomething SomeDomainObject domainObject bool anOpt
  • Xcode 6.4 Swift 单元测试无法编译:“GPUImage.h 未找到”“无法导入桥接标头”

    我的 Xcode 项目构建并运行良好 它有 Swift 和 Objective C 代码 它已安装 GPUImage 我向它添加了单元测试 现在它将不再编译 找不到 GPUImage h 文件 导入桥接标头失败 以下是我发现并尝试过的解决方
  • 获取测试用例中的 BOOST TEST 测试套件名称

    我在用着BOOST TEST我想知道是否有办法找出test suite从里面test case 我知道我能找到test case的名字由 boost unit test framework current test case p name
  • 使用文件 IO 的单元测试方法

    我正在努力养成编写单元测试的习惯 我之前写过一些 但它们通常都很基础 我想开始转向 TDD 因为我想提高质量我的代码 设计和结构 减少耦合 同时希望减少可测试构建的回归数量 我从一个相对简单的项目开始 生成的程序监视一个文件夹 然后对该文件
  • 如何在 Laravel 中基于 application/json 标头加载路由

    我正在使用application json标头来控制我的控制器在收到请求时的行为 我需要在单元测试中的 POST 中包含application json header 我试过了 public function testStore this
  • 使用内联查询进行单元测试

    我知道有几个问题与我的类似 Dapper 单元测试 SQL 查询 https stackoverflow com questions 20461553 dapper unit testing sql queries 测试简洁的查询 http
  • ViewModel 的列表在操作中为 null

    我正在开发我的第一个 ASP NET MVC 3 应用程序 我有一个如下所示的视图 model IceCream ViewModels Note NotesViewModel using Html BeginForm Html Valida
  • Spring @ContextConfiguration

    我正在运行下一个测试 import static org junit Assert assertEquals import org junit Test import org junit runner RunWith import org
  • 无法加载文件或程序集“Newtonsoft.Json”或其依赖项之一

    首先 它不仅仅是重复的 以下问题的答案都不适合我 http goo gl tS40cn http goo gl tS40cn http goo gl pH6v2T http goo gl pH6v2T 我刚刚使用 Nuget 包管理器更新了
  • Razor 如何创建一个复选框并使其只读?

    我正在使用 MVC 3 和 Razor 目前我正在使用 model MyProject ViewModels MyViewModel foreach var item in Model MyProperty tr td Html Actio
  • 茉莉花单元测试 - 测试对象的未定义属性

    我有以下声明 expect A BAR name toEqual foo 由于我的对象 A 具有顶级属性 BAR 并且 bar 具有值 foo 传递 我想测试我的结构以确认属性 NONEXISTINGPROP 尚未定义 例如 expect
  • MVC5 实体框架的问题

    我在我的 Web 应用程序中使用 Visual Studio 2013 中的 ASP NET MVC5 Entity Framework 6 我正在尝试我的模型工作 但由于某种原因而出现错误 我已经尝试过 Fluent API 和它自己的模
  • MVC4 捆绑:由于 css3 功能而缩小失败?

    我想使用 MVC4 捆绑和缩小 但我总是在未缩小的 css 文件中收到此错误消息作为注释 Minification failed Returning unminified contents 534 29 run time error CSS
  • 如何在 DropDownList 中保留空格 - ASP.net MVC Razor 视图

    我在视图中通过以下方式绑定我的模型 问题是我的项目文本是格式化文本 单词之间有空格 如下所示 123 First 234 00 123 AnotherItem 234 00 123 Second 234 00 我想保留此项目文本中的空格 即

随机推荐

  • 如何检测 Pascal 中经过的时间?

    我正在尝试用 Pascal 创建一个简单的游戏 它使用控制台 游戏的目标是在 60 秒内收集尽可能多的 苹果 游戏结构是一个简单的无限循环 每次迭代 您都可以迈出一步 问题是 在你采取行动之前 readKey 时间可以随心所欲地流逝 例如
  • 如何删除用 / 分隔的单元格中的重复值?

    我在Excel中有多个单元格 其内容如下 b1 E4I8 E4I8 E4I8 E4I8 b2 D3B2 B30C1 D3B2 D3B2 D3B2 B30C1 multiple xxxx 如何删除同一单元格中的这些重复文本字符串 谢谢 此函数
  • 获取 .NET 方法返回值的属性数据

    我可以在 MemberInfo 上调用 GetCustomAttributesData 这很好 因为我知道调用了哪个构造函数来初始化属性以及使用了哪些命名参数 如果我将 return 放在方法上以赋予返回值属性 则无法访问 GetCusto
  • Excel:在“kx + m”文本字符串中查找 k 和 m

    有没有一种巧妙的方法使用VBA或查找 a 中的 k 和 m 变量的公式kx m string kx m 字符串的外观有多种情况 例如 312 x 12 12 x 2 4 x 等等 我很确定我可以通过在 Excel 中编写非常复杂的公式来解决
  • Selenium 应用程序在 Heroku 上托管时重定向到 Cloudflare 页面

    我制作了一个不和谐的机器人 它使用 selenium 访问网站并获取信息 当我在本地运行代码时 我没有任何问题 但是当我部署到 Heroku 时 我得到的第一个 URL 将我重定向到该页面Attention Required Cloudfl
  • 根据单选按钮单击显示和隐藏 div [重复]

    这个问题在这里已经有答案了 我希望能够使用单选按钮和 jQuery HTML 动态更改显示的 div div 2 Cars div
  • Linq 风格“For Each”[重复]

    这个问题在这里已经有答案了 是否有用于 Foreach 操作的 Linq 风格语法 例如 将基于一个集合的值添加到另一个已存在的集合中 IEnumerable
  • Pycharm 中的远程开发 - 无需本地副本

    我知道如何在 Pycharm 中设置远程解释器 到目前为止远程开发进展顺利 但在某些情况下 我无法在我处理商业问题的计算机上保存文件的本地副本 有没有办法在 Pycharm 中远程开发WITHOUT有脚本和其他项目文件的本地副本吗 我刚刚遇
  • IE 中的 JavaScript 分析器

    有谁知道在 IE 中分析 JavaScript 的工具吗 可用列表 IE8 http blogs msdn com ie archive 2008 09 11 introducing the ie8 developer tools jscr
  • 录制直播音频

    我实际上正在制作一个应用程序 它必须在 iPad 上播放和录制来自互联网的流媒体音频 音频流已经完成 我很快就要进入录音部分 我不知道如何继续 你能给我一个提示吗 主意 它必须在播放的同时录制为 AAC 或 MP3 Thanks 您需要使用
  • 如何在 TypeScript 中通过 AMD 请求 jquery

    我的 TypeScript 模块如何需要 jquery AMD 模块 例如 假设脚本的目录结构如下所示 jquery 1 8 2 js jquery d ts module ts require js 我希望从 module ts 生成的
  • 为什么它不是尾递归?

    我有以下代码 我不明白为什么它不是尾递归 override fun drop n Int List a if n 0 this else tail drop n 1 而这是尾递归 fun drop n Int List a tailrec
  • 如何在 Python 中比较数组中的值 - 找出两个值是否相同

    我基本上有一个包含 50 个整数的数组 我需要找出这 50 个整数是否相等 如果相等 我需要执行一个操作 我该怎么做呢 据我所知 Python 中目前没有一个函数可以做到这一点 如果你的意思是你有一个列表并且你想知道是否有重复的值 那么从列
  • 并发、并行和异步方法有什么区别?

    并发是指两个任务在不同的线程上并行运行 但是 异步方法并行运行 但在同一个线程上 这是如何实现的 另外 并行性怎么样 这3个概念有什么区别 并发和并行实际上与您正确推测的原理相同 两者都与同时执行的任务有关 尽管我想说并行任务应该是真正的多
  • Wpf:在多个控件上应用自定义样式的工具提示

    我正在使用 WPF 应用程序 我创建了一个自定义控件库 在其中自定义了所有控件 这意味着添加了一些功能并重新设计了它们的样式 我也以同样的方式重新设计了工具提示 我在其他项目中使用这个自定义库 除了工具提示之外 一切都工作正常 工具提示样式
  • 如何使用两个按钮从 api 制作日期和时间列表水平视图,以通过颤动滚动列表视图

    我在颤振日期和时间页面视图中 当用户单击时间时 将单击的时间设置为灰色 并将其他时间设置为透明颜色 在此图片中您可以看到所选日期 https i stack imgur com jQ8dd jpg请注意 用户可以再次重新选择 以便旧的选择设
  • 如何转换 JToken

    我有一个值为 1234 的 JToken 如何将其转换为整数值 如 var totalDatas 1234 var tData jObject totalDatas int totalDatas 0 if tData null totalD
  • Pandas 中的plot 和iplot 有什么区别?

    在 Jupyter Notebook 中显示图形时 plot 和 iplot 有什么区别 我刚刚开始在 Python 3 6 6 中使用 iplot 我认为它使用了 Cufflinks 包装器来运行 Matplotlib 这似乎是我用简单的
  • MongoDB 数组 - 原子更新或推送元素

    我在 MongoDB 中有以下文档 id ObjectId 521aff65e4b06121b688fabc user abc servers name server1 cpu 4 memory 4 name server2 cpu 6 m
  • 如何在MVC单元测试类中模拟Request.Files[]?

    我想在 MVC 单元测试中测试控制器方法 为了测试我的控制器方法 我需要一个长度为 1 的 Request Files 集合 我想模拟 Request Files 因为我在控制器方法渲染的视图上使用了文件上传控件 任何人都可以建议我如何在单