c# - 尝试使用 MSTest 为 C# 中的 DataType.PhoneNumber 编写单元测试
问题描述
我是 MSTest 的新手。我有一个数据类型 PhoneNumber:
public class PhoneNumber : ValueObject
{
[DataType(DataType.PhoneNumber)]
public string PhNumber { get; private set; }
}
现在我需要为它编写一个单元测试。几个问题:
- MS Test 是否有任何内置功能来验证数据类型?
- 是否有关于如何验证电话号码的示例代码?
解决方案
请改用该[Phone]
属性。
PhoneAttribute派生自DataTypeAttribute
并覆盖该IsValid
方法,该方法检查该值是否实际上是有效的电话号码。
使用
[DataType(DataType.PhoneNumber)]
对电话号码验证没有任何作用,并且在上面显示的示例中使用不正确
DataTypeAttribute
主要用作创建自定义和目标验证属性的基本属性。
出于演示目的,假设我要测试以下课程
public class PhoneNumber : ValueObject {
public PhoneNumber(string number) {
Number = phoneNumber;
}
[Phone]
public string Number { get; private set; }
//...
}
查看以下 MSTest 测试,了解有效和无效的电话号码
[TestClass]
public class PhoneNumberTests {
[DataTestMethod]
[DataRow("555-5555")]
[DataRow("555-555-5555")]
[DataRow("1-555-555-5555")]
public void Should_Be_Valid(string number) {
//Arrange
var subject = new PhoneNumber(number);
var context = new ValidationContext(subject, null, null);
var results = new List<ValidationResult>();
//Act
var actual = Validator.TryValidateObject(subject, context, results, true);
//Assert
actual.Should().BeTrue();
results.Should().BeEmpty();
}
[DataTestMethod]
[DataRow("abcd")]
[DataRow("5555a")]
[DataRow("abc5555a")]
public void Should_Not_Be_Valid(string number) {
//Arrange
var subject = new PhoneNumber(number);
var context = new ValidationContext(subject, null, null);
var results = new List<ValidationResult>();
//Act
var actual = Validator.TryValidateObject(subject, context, results, true);
//Assert
actual.Should().BeFalse();
results.Should().NotBeEmpty();
}
}
请注意使用静态Validator
类来评估修饰属性并验证对象是否有效。
推荐阅读
- unity3d - (Unity) 为什么我的 2d 动画看起来不流畅?
- ios - 您如何创建一个仅在首次启动时出现一次的入职屏幕?(斯威夫特/swiftui)
- python - 发送带有数据和 JSON 参数的 post 请求
- javascript - 如何匹配内容脚本(firefox)中的所有域扩展?
- html - CSS 帮助 : 使内容块扩展到几乎整页
- python - 当程序在 Python 中完成时,如何使函数运行?
- reactjs - 2个子组件无限重新渲染
- mysql - 对如何连接到 MySQL 数据库感到困惑
- assembly - 是否指定了在 x64 上推送堆栈指针时会发生什么?
- directory - 在 Julia 中为每次运行创建新目录