Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 正在尝试使用MSTest为C中的DataType.PhoneNumber编写单元测试#_C#_Mstest_Phone Number - Fatal编程技术网

C# 正在尝试使用MSTest为C中的DataType.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

我是新来的。我有一个数据类型PhoneNumber:

public class PhoneNumber : ValueObject
{
    [DataType(DataType.PhoneNumber)]
    public string PhNumber { get; private set; }
}
现在我需要为它编写一个单元测试。有几个问题:

  • MS Test是否有任何内置功能来验证数据 类型
  • 是否有关于如何验证电话号码的示例代码
  • 改为使用属性

    派生自
    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();
        }
    }