gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 20:38:21 25 4
gpt4 key购买 nike

我已经使用 Ninject.Extensions.Mvc.FluentValidation 包设置了一个带有 FluentValidation 和 Ninject 的 MVC Web 项目。我直接遵循了该软件包的文档。

我想编写一个自动化测试来验证此接线,并检查模型验证是否将按预期使用 FluentValidation 验证器。为了做到这一点,我很难在测试中启动 MVC 应用程序的正确部分。

基本上,我想启动 MVC 应用程序,以便创建 Ninject 内核、连接模型绑定(bind)器并创建验证器。然后我想尝试通过 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;

通过这种设置,我知道我的验证器将拦截 Controller 操作中的模型验证,但前提是验证器由 ValidatorFactory 解析。

所以基本上我有两组测试

- 国际奥委会测试

使用这些我测试我的 IoC 容器是否可以解析模型的验证器。使用 Unity,它看起来像这样:
// Arrange
var ioc = new IoCContainer();

// Assert
Assert.IsTrue(ioc.IsRegistered(IValidator<MyModel>));

如果您将所有模型都放在一个命名空间下,您甚至可以通过从特定命名空间获取所有类型并检查 IValidator 是否在循环中为它们注册来编写单个单元测试。

- 验证器测试

这些是测试我的( View )模型的常见测试:
// Arrange
var validator = new MyModelValidator();
var model = new MyModel{ Name = null };

// Assert
validator.ShouldHaveValidationErrorFor(x => x.Name, model)

这样就不需要旋转应用程序,您只需测试您创建的内容。

希望这可以帮助。

关于asp.net-mvc - MVC、FluentValidation 和 Ninject 的单元测试接线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15093802/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com