单元测试控制器

2024-01-05

我有一个非常简单的场景:

[HttpGet]
public ActionResult CreateUser()
{
    return View();
}

[HttpGet]
public ActionResult Thanks()
{
    return View();
}

[HttpPost]
public ActionResult CreateUser(CreateUserViewModel CreateUserViewModel)
{
    if (ModelState.IsValid)
    {
    return View("Thanks");
    }

    return View(CreateUserViewModel);
}

我的单元测试使用 mvc contrib 中的 testhelper:

[Test]
public void UserController_CannotCreateUserWithNoLastName()
{
    // arrange
    UsersController UsersController = new UsersController();
    CreateUserViewModel CreateUserViewModel = new CreateUserViewModel();
    CreateUserViewModel.LastName = "";

    // act
    ActionResult result = UsersController.CreateUser(CreateUserViewModel);

    // assert
    result.AssertViewRendered().ForView("CreateUser");
}

当我打开浏览器并尝试提交无效用户(无姓氏)时,它会重定向到 createuser 表单,但单元测试失败(它说它重定向到感谢)。为什么是这样?谁能看出有什么问题吗?谢谢!


在单元测试中,您应该模拟模型有错误,因为这是您想要测试的内容(错误路径)。在您的测试中,模型是有效的,这就是它将您重定向到“谢谢”视图的原因。要模拟错误,您可以在“act”部分之前的单元测试中执行此操作:

UsersController.ModelState.AddModelError("username", "Bad username"); 

看看那个例子:http://www.thepursuitofquality.com/post/53/how-to-test-modelstateisvalid-in-aspnet-mvc.html http://www.thepursuitofquality.com/post/53/how-to-test-modelstateisvalid-in-aspnet-mvc.html

有关 AddModelError 方法的更多信息请参见此处:http://msdn.microsoft.com/en-us/library/system.web.mvc.modelstatedictionary.addmodelerror.aspx http://msdn.microsoft.com/en-us/library/system.web.mvc.modelstatedictionary.addmodelerror.aspx

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

单元测试控制器 的相关文章

  • RegisterGlobalFilters 的目的是什么?

    在 MVC3 中 我以这种方式启用了 CustomErrors
  • 临时目录中自动生成的“App_Web********.cs”文件导致构建错误

    因此 这已经困扰我一段时间了 但有时在我的 Visual Studio 2013 ASP NET MVC4 项目中 我会删除未使用的 ViewModel 类 并在下一次编译时收到如下错误 对于名为 我刚刚删除的 MostRecentMemb
  • 是否可以让 ASP.NET MVC 3 项目在 Mono 2.10 下运行?

    Mono 2 10 的发行说明建议支持 ASP NET MVC 3 0 和Razor http weblogs asp net scottgu archive 2010 07 02 introducing razor aspx using
  • JQuery Mobile 与 MVC 的链接

    我正在使用 ASP NET MVC 3 和 Razor UI 设置 JQuery 移动网站 我正在生成我的链接 例如 a href See Group 2 a 假设我从 Home Index 访问它 我遇到的问题是 当我点击链接时 它会出现
  • Elmah 不会在 MVC 应用程序中记录 http post 请求的异常 - 如果请求包含 XML

    我在 MVC4 RC 应用程序中遇到了一个奇怪的问题 在 NET 4 0上运行 我刚刚设置 Elmah 来记录异常 错误 我基本上安装了埃尔玛MVC and elmah sqlserverNuGet 包 分别为2 0 0和1 2版本 它似乎
  • 挂钩 jQuery 验证消息更改

    我想在工具提示中显示 jQuery 验证消息 为了实现这一目标 我首先将以下 CSS 规则添加到我的样式表中 fieldset field validation error display none fieldset field valid
  • 在 C# mvc 代码中进行实时搜索后,如何用值更新无序列表?

    我想在文本框中输入内容时进行实时搜索来过滤结果 有一个 html 无序列表 在页面加载时从模型中填充 这些是我在搜索时要过滤的项目 问题是如何使用搜索值更新 ul cshtml页面 div div
  • 使用 Moq 和 EF 4.1 模拟工作单元

    我正在通过 Contoso 示例进行一些 TDD 实践 并且我用于检索学生的测试正在通过 我创建新学生的测试失败了 尽管实际代码有效 因为我相信 DBContext 没有被嘲笑 为了通过这个测试 我应该重构什么 测试失败 如下所示 Cont
  • 有没有办法让 DefaultModelBinder 在绑定到 List 时忽略空项

    我有一个场景 我想更改 DefaultModelBinder 绑定到枚举列表的方式的行为 我有一个枚举 public enum MyEnum FirstVal SecondVal ThirdVal 和一个模型类 public class M
  • ASP.NET MVC:我什么时候应该创建自定义视图引擎

    我知道什么View Engine是 我更喜欢使用Razor视图引擎只是因为它的语法简单ASPX引擎 内置视图引擎为您执行几乎所有任务 那么在什么情况下我应该创建自己的视图引擎 我用谷歌搜索了它 但得到了如何创建它的答案 而不是何时以及为什么
  • 将 .MDF SQL Server 数据库与 ASP.NET 结合使用与使用 SQL Server

    我目前正在 ASP NET MVC 中编写一个网站 我的数据库 其中还没有任何数据 只有正确的表 使用 SQL Server 2008 我已将其安装在我的开发计算机上 我使用服务器资源管理器从应用程序连接到数据库 然后使用 LINQ to
  • MVC3 Ajax.ActionLink

    对于以下情况 Ajax ActionLink Delete Delete AdminGroup new id item AdminGroupId new AjaxOptions Confirm Delete HttpMethod Delet
  • 在 CSHTML 页面中实现 switch 语句

    我正在尝试做一些不同的事情 我有一个包含 ID 的视图 根据 Id 的值 我想更改显示的标题 就像是 switch id case test h1 Test Site h1 case prod h1 Prod Site h1 break 我
  • ASP.NET MVC 多线程

    我想在我的 asp net mvc 应用程序中实现这样的逻辑 user clicks a button gt server executes some time consuming logic in 15 threads i get dat
  • 在asp net mvc中简单的图像上传

    我正在构建一个简单的学校门户 我一直坚持将图像上传到我的应用程序中 即用户应该将学校图像上传到我的服务器 我的图像目录为 Content Images 所有上传图像都应该上传到这个目录 我有以下代码 input type file id S
  • orchard cms路由问题

    我创建了一些自定义内容类型 其中包括路线部分 以便我的内容管理员可以编辑项目的别名 我没有运气配置一条路线 使我自己的控制器能够为这些项目的请求提供服务 核心 Routable 模块中到 ItemController 的路径的路由优先级为
  • MVC 重定向到没有控制器的视图

    希望应该是一个简单的 我创建了一个通用错误视图 当整个站点的操作方法内发生异常时 我想显示该视图 我创建了一个部分页面 所有导航都位于其中 因此我不需要在此视图上使用控制器 那么如何从控制器内的操作方法重定向到它 像这样的东西 HttpPo
  • jQuery UI 对话框 + 验证

    我在单击 保存 后使用 Jquery Validate 验证 jQuery UI 对话框时遇到问题 这是我创建 Jquery 对话框的代码 它从目标 href URL 加载对话框 document ready dialogForms fun
  • mvc4 捆绑包,它是如何工作的?

    在 mvc4 中 他们使用捆绑包来调用所有脚本和 css 文件一次 据我所知 调用js和cs文件时 它们的顺序很重要 如果我使用捆绑包 我如何知道捆绑包内的 css 和 js 文件的顺序是否正确 我可以定制订购吗 我现在的日期选择器有问题
  • 如何使用 ViewBag 创建 BaseController

    我需要执行以下操作 我已经准备好一些控制器并正在运行 但现在我想创建一个BaseController 我的每一个Controllers应该像这样继承它 public class MySecondController BaseControll

随机推荐

  • 比较堆转储 (HPROF) 文件

    是否可以比较两个 HPROF 文件 如何 根据我的发现 您只能比较对象的直方图 为此 请转到 直方图 视图 然后单击 与另一个堆转储比较 并选择另一个 hprof 文件 Here is screenshot
  • 获取孩子的所有孩子等等

    我使用 MongoDb 作为数据库 我想要所有孩子的孩子等等 让我们假设 A 有 B 和 C 孩子 B 有 D 和 E 孩子 D 有 F 和 G 孩子 所以当我查询子节点时A 我将所有孩子作为输出 例如 B C D E F G C Cust
  • 检查一个数据帧的值是否按确切顺序存在于另一个数据帧中

    我有 1 个数据数据框和多个 参考 数据框 我正在尝试自动检查数据帧的值是否与参考数据帧的值匹配 重要的是 这些值的顺序也必须与参考数据帧中的值相同 这些列是重要的列 但我的真实数据集包含更多列 下面是一个玩具数据集 Dataframe g
  • 1个月后自动将列表数据从一个列表复制到另一个列表

    我列出了在提交信息路径表单后动态存储数据的列表 我想在任何数据创建日期 30 天后存档此数据 你能建议我该怎么做吗 看看我可以通过工作流程做到这一点 但我如何设置条件 在创建任何列表后 30 天完成后 它将自动复制到其他列表中 首先我想问为
  • 如何防止XSS攻击

    渗透测试团队告诉我 以下 URL 正在引发 XSS 攻击 这是我的 download msg jsp 代码
  • 存储过程参数默认值

    我正在尝试创建一个带有默认参数的存储过程 在我的查询中我会这样做 DECLARE mydate DATETIME DECLARE MT DATETIME DECLARE MY DATETIME SELECT mydate GETDATE S
  • 填充seaborn / matplotlib中两个正态分布之间的重叠区域

    我想填充两个正态分布之间重叠的区域 我有x最小值和最大值 但我不知道如何设置y边界 我看过plt文档 https matplotlib org gallery lines bars and markers fill between demo
  • 使用 mongo-cxx-driver 构建 C++ 项目时出现链接错误

    我目前正在开发一个C 需要使用的应用程序mongo cxx driver用于访问MongoDB实例 我尝试了几种安装方法 但每次都会遇到相同的链接器问题 最初 我尝试安装mongo cxx drivers and mongod c driv
  • aiohttp.TCPConnector (带有 limit 参数)与 asyncio.Semaphore 用于限制并发连接数

    我想我想通过制作一个简单的脚本来学习新的 python async wait 语法 更具体地说是 asyncio 模块 该脚本允许您一次下载多个资源 但现在我被困住了 在研究时 我发现了两种限制并发请求数量的选项 将 aiohttp TCP
  • 如何在 Delphi 中创建文本文件

    我有一个程序 用户可以在其中注册我的程序 并为他们创建一个文本文件 我尝试过使用 CreateFile 函数 但不确定参数 当每个用户使用此功能或任何其他功能注册时 如何为他们创建一个文本文件 也许您可以创建一个字符串列表并将其保存到文件中
  • 如何检查 HTTP_REFERER 是否包含字符串,但不完全匹配?

    我知道 HTTP REFERER 作为安全措施并不安全 但我仍然想知道 如何检查 HTTP REFERER 的值是否包含 www someexample com 即使它可能是 www someexample com awards user
  • 将数据库从 MS Access 转换为 Android 版 SQlite

    我有一个 MS Access 数据库 现在我想转换为 SQLite 数据库 是否可以 如果是 并且您有任何与之相关的想法 请与我分享 谢谢 您可以使用以下工具对其进行转换 https www sqlite org cvstrac wiki
  • 我可以返回并编辑 SVN 签入的评论吗?

    我在 SVN 的评论中添加了一个错误 我可以在签入后编辑此内容吗 提交消息是 未版本控制的属性 http svnbook red bean com en 1 0 ch05 html svn ch 5 sect 1 2并可以改变svn 属性集
  • 直接从文件系统访问网站时,IE9 中的本地存储失败

    两种说法window localStorage and window localStorage 访问 url file C index html 时未定义 在文件系统上运行网站时 localStorage 是否受到限制 附言 我在 Wind
  • 为什么 knitr 代码块中的 $PATH 与终端中的 $PATH 不同?

    knitr BASH 块中回显的 PATH 缺少我的 MACOS 终端中 PATH 的一些路径 这是为什么 有没有什么方法可以将 knitr 中的 bash 引擎中的默认 PATH 设置为与终端中相同 1 针织物 bash echo PAT
  • 将 org.w3c.dom.Node 转换为文档

    我有一个Node从一Document 我想要那个Node并将其变成新的根节点Document 我能想到的唯一方法如下 Node node someChildNodeFromDifferentDocument DocumentBuilderF
  • q.all 不适用于多个 Promise

    我有以下 q all 调用来解决两个承诺 我检查了所有帖子并尝试了所有其他实施方式 q all 及其相同的情况 var xyzdeffered q defer service1 getServiceDetail1 routeParams i
  • 如何将 numpy datetime64 转换为 datetime [重复]

    这个问题在这里已经有答案了 我基本上面临着这里发布的同样的问题 日期时间 时间戳和 datetime64 之间的转换 https stackoverflow com questions 13703720 converting between
  • Laravel 5.2.11,会话不起作用,会话 cookie 未设置

    我是 Laravel 的新手 我了解了模型 视图 刀片 控制器和路由以及它们如何协同工作 到目前为止 一切都很顺利 不过 我在会议上遇到了麻烦 当我使用 Laravel 附带的 AuthController 并通过 POST 请求点击 au
  • 单元测试控制器

    我有一个非常简单的场景 HttpGet public ActionResult CreateUser return View HttpGet public ActionResult Thanks return View HttpPost p