加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – MVC,FluentValidation和Ninject的单元测试接线

发布时间:2020-12-16 06:23:18 所属栏目:asp.Net 来源:网络整理
导读:我使用Ninject.Extensions.Mvc.FluentValidation包使用FluentValidation和Ninject建立了一个MVC Web项目.我直接跟踪了该软件包的文档. 我想编写一个验证此连线的自动化测试,并检查模型验证是否按预期使用FluentValidation验证器.为了做到这一点,我很难在我的
我使用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)

有了这个,就不需要旋转应用程序,只需测试你创建的内容.

希望这可以帮助.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读