asp.net-mvc – MVC,FluentValidation和Ninject的单元测试接线
我使用Ninject.Extensions.Mvc.FluentValidation包使用FluentValidation和Ninject建立了一个MVC Web项目.我直接跟踪了该软件包的文档.
我想编写一个验证此连线的自动化测试,并检查模型验证是否按预期使用FluentValidation验证器.为了做到这一点,我很难在我的测试中调整正确的MVC应用程序. 基本上,我想充分启动MVC应用程序,以便创建Ninject内核,连接模型绑定器,并创建验证器.然后我想尝试通过MVC模型验证来验证实体,并确保显示来自验证器的预期消息. 自动测试Ninject,MVC和FluentValidation之间交互的最佳方法是什么? 解决方法
我有类似的设置,但我使用Unity而不是Ninject.
我的IoC容器继承了UnityContainer,我在那里注册了所有的repos,validarots等.我受益于此,因为我有具有repo依赖性的验证器(例如UserRegistrationValidator检查唯一的用户名). 我的IoC容器也实现了IValidatorFactory.我使用它注册一个全局的ModelValidatorProvider,如下所示: var ioc = new IoCContainer(); ModelValidatorProviders.Providers.Add(new FluentValidationModelValidatorProvider(ioc)); DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false; 通过这种设置,我知道我的验证器将拦截控制器操作中的模型验证,但前提是验证器由ValidatorFactory解析. 所以基本上我有两组测试 – IoC测试 有了这些,我测试我的IoC容器是否可以解析模型的验证器.使用Unity,它看起来像这样: // Arrange var ioc = new IoCContainer(); // Assert Assert.IsTrue(ioc.IsRegistered(IValidator<MyModel>)); 如果您将所有模型都放在一个名称空间下,您甚至可以通过从特定名称空间获取所有类型来编写单个单元测试,并检查是否在循环中为它们注册了IValidator. – 验证器测试 这些是测试我的(视图)模型的常见测试: // Arrange var validator = new MyModelValidator(); var model = new MyModel{ Name = null }; // Assert validator.ShouldHaveValidationErrorFor(x => x.Name,model) 有了这个,就不需要旋转应用程序,只需测试你创建的内容. 希望这可以帮助. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- ASP.NET LinkBut??ton – 如何隐藏javascript_doPostBack?
- asp.net-mvc – Thunderdome MVC-为什么在MVC中使用one-mod
- asp.net – SimpleMembership向经过身份验证的用户提供登录
- asp.net-core-mvc – 如何在启动时初始化应用程序状态并从M
- asp.net-mvc – 什么原因导致asp.net无法创建/影子复制错误
- 遭遇Asp.Net长文件名下载的问题和解决办法
- asp.net-web-api – 在ODataConventionModelBuilder中设置数
- asp.net-mvc – 使用MVC 4和实体框架填充DropDownList
- asp.net-mvc-4 – 将复杂的viewmodel发布到控制器
- asp.net-mvc – NHibernate与实体框架