C#-Asp.net单元测试模型数据注释DataType.EmailAddress?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C#-Asp.net单元测试模型数据注释DataType.EmailAddress?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2272字,纯文字阅读大概需要4分钟。
内容图文
如何测试DataType.EmailAddress?
我有一个带有电子邮件属性的客户模型,其中包含以下数据注释以进行验证:
[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; }
我正在编写单元测试来测试验证.我已经弄清楚了如何测试所需的字符串长度.
这是我的方法,可以捕获其他错误,但是不处理DataType验证:
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] DataTypeAttribute.
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?全部内容,希望文章能够帮你解决C#-Asp.net单元测试模型数据注释DataType.EmailAddress?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。