gpt4 book ai didi

asp.net-mvc - ASP.net MVC - FluentValidation 单元测试

转载 作者:行者123 更新时间:2023-12-03 21:37:57 24 4
gpt4 key购买 nike

我在我的 MVC 项目中使用 FluentValidation 并具有以下模型和验证器:

[Validator(typeof(CreateNoteModelValidator))]
public class CreateNoteModel {
public string NoteText { get; set; }
}

public class CreateNoteModelValidator : AbstractValidator<CreateNoteModel> {
public CreateNoteModelValidator() {
RuleFor(m => m.NoteText).NotEmpty();
}
}

我有一个 Controller 操作来创建注释:
public ActionResult Create(CreateNoteModel model) {
if( !ModelState.IsValid ) {
return PartialView("Test", model);

// save note here
return Json(new { success = true }));
}

我写了一个单元测试来验证行为:
[Test]
public void Test_Create_With_Validation_Error() {
// Arrange
NotesController controller = new NotesController();
CreateNoteModel model = new CreateNoteModel();

// Act
ActionResult result = controller.Create(model);

// Assert
Assert.IsInstanceOfType(result, typeof(PartialViewResult));
}

我的单元测试失败了,因为它没有任何验证错误。这应该会成功,因为 model.NoteText 是 null 并且有一个验证规则。

当我运行 Controller 测试时,FluentValidation 似乎没有运行。

我尝试将以下内容添加到我的测试中:
[TestInitialize]
public void TestInitialize() {
FluentValidation.Mvc.FluentValidationModelValidatorProvider.Configure();
}

我在 Global.asax 中有同样的行,可以自动将验证器绑定(bind)到 Controller ......但它似乎在我的单元测试中不起作用。

我怎样才能让它正常工作?

最佳答案

这很正常。验证应与 Controller 操作分开测试,like this .
要测试您的 Controller 操作,只需模拟 ModelState错误:

[Test]
public void Test_Create_With_Validation_Error() {
// Arrange
NotesController controller = new NotesController();
controller.ModelState.AddModelError("NoteText", "NoteText cannot be null");
CreateNoteModel model = new CreateNoteModel();

// Act
ActionResult result = controller.Create(model);

// Assert
Assert.IsInstanceOfType(result, typeof(PartialViewResult));
}
Controller 不应该真正了解流利的验证。这里需要测试的是 ModelState中是否存在验证错误您的 Controller 操作行为正确。如何将此错误添加到 ModelState是一个不同的问题,应该单独测试。

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

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