gpt4 book ai didi

c# - Asp.net单元测试模型数据注解DataType.EmailAddress?

转载 作者:行者123 更新时间:2023-11-30 15:57:51 26 4
gpt4 key购买 nike

如何测试 DataType.EmailAddress

我有一个 Customer 模型,它有一个 Email 属性,带有以下要验证的数据注释:

[StringLength(100)]
[DataType(DataType.EmailAddress, ErrorMessage = "Email must be a valid email address")]
[Display(Name = "Email")]
[Required(ErrorMessage = "Email is required")]
public string email { get; set; }

我正在编写单元测试来测试验证。我已经弄清楚如何测试所需的字符串长度。

这是我捕获其他错误但不处理数据类型验证的方法:

private List<ValidationResult> ValidateModel<T>(T model)
{
var context = new ValidationContext(model, null, null);
var result = new List<ValidationResult>();
var valid = Validator.TryValidateObject(model, context, result, true);

return result;
}

我在测试方法中调用它:

[TestMethod]
public void Invalid_email_addresses_throw_errors()
{
var model = new Models.Customer();

model.email = "";
var results = ValidateModel(model);
Assert.IsTrue(results.Any(v => v.ErrorMessage == "Email is required"));
}

如何测试 DataType.EmailAddress - 传递无效值并收到错误结果?

最佳答案

使用 [EmailAddress]数据类型属性。

EmailAddressAttribute派生自 DataTypeAttribute 并覆盖 IsValid 方法,该方法检查该值是否实际上是有效的电子邮件。

使用

[DataType(DataType.EmailAddress, ErrorMessage = "Email must be a valid email address")]

不对电子邮件验证做任何事情。

如果您检查 DataTypeAttribute 的源代码您会意识到它主要是用于创建自定义和目标验证属性的基本属性。

原始问题中的 DataTypeAttribute 使用不正确。没有其他解决方案,只能使用 EmailAddressAttribute,如下面的单元测试所示。

[TestClass]
public class UnitTestExample {
[TestMethod]
public void Invalid_email_addresses_throw_errors() {
//Arrange
var badEmail = "1234_)(";
var subject = new Customer { email = badEmail };

//Act
var results = ValidateModel(subject);

//Assert
Assert.IsTrue(results.Count > 0);
Assert.IsTrue(results.Any(v => v.MemberNames.Contains("email")));
}

public class Customer {

[StringLength(100)]
[Display(Name = "Email")]
[Required(ErrorMessage = "Email is required")]
[EmailAddress(ErrorMessage = "Email must be a valid email address")]
public string email { get; set; }

}

private List<ValidationResult> ValidateModel<T>(T model) {
var context = new ValidationContext(model, null, null);
var result = new List<ValidationResult>();
var valid = Validator.TryValidateObject(model, context, result, true);

return result;
}
}

关于c# - Asp.net单元测试模型数据注解DataType.EmailAddress?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44418333/

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