gpt4 book ai didi

asp.net - 单元测试 ASP.NET DataAnnotations 验证

转载 作者:行者123 更新时间:2023-12-03 05:31:48 25 4
gpt4 key购买 nike

我正在使用 DataAnnotations 进行模型验证,即

[Required(ErrorMessage="Please enter a name")]
public string Name { get; set; }

在我的 Controller 中,我正在检查 ModelState 的值。对于从我的 View 中发布的无效模型数据,这正确地返回 false。

但是,当执行我的 Controller 操作的单元测试时,ModelState 始终返回 true:

[TestMethod]
public void Submitting_Empty_Shipping_Details_Displays_Default_View_With_Error()
{
// Arrange
CartController controller = new CartController(null, null);
Cart cart = new Cart();
cart.AddItem(new Product(), 1);

// Act
var result = controller.CheckOut(cart, new ShippingDetails() { Name = "" });

// Assert
Assert.IsTrue(string.IsNullOrEmpty(result.ViewName));
Assert.IsFalse(result.ViewData.ModelState.IsValid);
}

我需要做任何额外的事情来在测试中设置模型验证吗?

最佳答案

我将此发布于 my blog post :

using System.ComponentModel.DataAnnotations;

// model class
public class Fiz
{
[Required]
public string Name { get; set; }

[Required]
[RegularExpression(".+@..+")]
public string Email { get; set; }
}

// in test class
[TestMethod]
public void EmailRequired()
{
var fiz = new Fiz
{
Name = "asdf",
Email = null
};
Assert.IsTrue(ValidateModel(fiz).Any(
v => v.MemberNames.Contains("Email") &&
v.ErrorMessage.Contains("required")));
}

private IList<ValidationResult> ValidateModel(object model)
{
var validationResults = new List<ValidationResult>();
var ctx = new ValidationContext(model, null, null);
Validator.TryValidateObject(model, ctx, validationResults, true);
return validationResults;
}

关于asp.net - 单元测试 ASP.NET DataAnnotations 验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2167811/

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