C# 正在尝试使用MSTest为C中的DataType.PhoneNumber编写单元测试#
我是新来的。我有一个数据类型PhoneNumber:C# 正在尝试使用MSTest为C中的DataType.PhoneNumber编写单元测试#,c#,mstest,phone-number,C#,Mstest,Phone Number,我是新来的。我有一个数据类型PhoneNumber: public class PhoneNumber : ValueObject { [DataType(DataType.PhoneNumber)] public string PhNumber { get; private set; } } 现在我需要为它编写一个单元测试。有几个问题: MS Test是否有任何内置功能来验证数据 类型 是否有关于如何验证电话号码的示例代码 改为使用属性 派生自DataTypeAttribut
public class PhoneNumber : ValueObject
{
[DataType(DataType.PhoneNumber)]
public string PhNumber { get; private set; }
}
现在我需要为它编写一个单元测试。有几个问题:
DataTypeAttribute
,并重写IsValid
方法,该方法用于检查该值是否为有效电话号码
使用
不执行任何电话号码验证操作,并且在上述示例中被错误使用
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();
}
}
[TestClass]
公共类电话号码测试{
[数据测试方法]
[数据行(“555-5555”)]
[数据行(“555-555-5555”)]
[数据行(“1-555-555-5555”)]
public void应该是有效的(字符串编号){
//安排
var subject=新电话号码(number);
var context=新的ValidationContext(subject,null,null);
var results=新列表();
//表演
var-actual=Validator.TryValidateObject(主题、上下文、结果、true);
//断言
实际的;
results.Should().BeEmpty();
}
[数据测试方法]
[数据行(“abcd”)]
[数据行(“5555a”)]
[数据行(“abc5555a”)]
public void应该无效(字符串编号){
//安排
var subject=新电话号码(number);
var context=新的ValidationContext(subject,null,null);
var results=新列表();
//表演
var-actual=Validator.TryValidateObject(主题、上下文、结果、true);
//断言
实际的.Should().BeFalse();
results.Should().NotBeEmpty();
}
}
请注意,使用静态类来评估装饰属性并验证对象是否有效。官方文档始终是一个良好的开端什么是ValidationContext?@MikeLenart Reference。验证程序在进行验证时需要这样做。
[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();
}
}