Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.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# 单元测试元数据类型_C#_Asp.net_Unit Testing_Asp.net Mvc 2_Asp.net Mvc 2 Metadata - Fatal编程技术网

C# 单元测试元数据类型

C# 单元测试元数据类型,c#,asp.net,unit-testing,asp.net-mvc-2,asp.net-mvc-2-metadata,C#,Asp.net,Unit Testing,Asp.net Mvc 2,Asp.net Mvc 2 Metadata,我正在开发一个ASP.NET MVC 2应用程序,并像这样测试我的Viewmodels [TestMethod] public void EmailNeedsToBeSet() { var pvm = new ProfileViewModel {Email = ""}; var validationResults = new ValidationResults(); var result = Validator.TryValidateObject(pvm, new Val

我正在开发一个ASP.NET MVC 2应用程序,并像这样测试我的Viewmodels

[TestMethod]
public void EmailNeedsToBeSet()
{
    var pvm = new ProfileViewModel {Email = ""};
    var validationResults = new ValidationResults();
    var result = Validator.TryValidateObject(pvm, new ValidationContext(pvm, null, null), validationResults, true);
    Assert.IsFalse(result);
    Assert.IsTrue(validationResults.ContainsField<ProfileViewModel>(m => m.Email));
}

下面是我如何对这类代码进行单元测试:

    [TestMethod]
    public void IsValid_Returns_ValidationResult_Errors_When_Properties_With_Meta_Data_Are_Not_Valid()
    {
        var sut = new User
                      {
                          Login = "too long!!!"
                      };

        var actual = sut.IsValid();

        Assert.IsNotNull(actual);
        Assert.AreEqual(1, actual.Count);
        Assert.AreEqual(1, actual[0].MemberNames.Count());
        var firstValidationError = actual[0];
        Assert.AreEqual("Login", firstValidationError.MemberNames.First());
        Assert.AreEqual("The field Login must be a string with a maximum length of 4.", firstValidationError.ErrorMessage);
    }

    [TestMethod]
    public void IsValid_Returns_Empty_List_Of_Errors_When_Properties_With_Meta_Data_Are_Valid()
    {
        var sut = new User
                      {
                          Login = "abcd"
                      };

        var actual = sut.IsValid();

        Assert.IsNotNull(actual);
        Assert.AreEqual(0, actual.Count);
    }

[MetadataType(typeof(UserMetaData))]
public partial class User : BaseEntity
{
    public string Login { get; set; }

    public class UserMetaData
    {
        [Required]              
        [StringLength(4)]       
        public string Login { get; set; }
    }
}

public abstract class BaseEntity
{
    protected BaseEntity()
    {
        RegisterMetadata();
    }

    private void RegisterMetadata()
    {
        var currentType = GetType();

        var metadataType = GetMetadataType();

        if (metadataType == null)
            return;

        var descriptorProvider = new AssociatedMetadataTypeTypeDescriptionProvider(currentType, metadataType);
        TypeDescriptor.AddProviderTransparent(descriptorProvider, currentType);
    }

    private Type GetMetadataType()
    {
        var attribute = Attribute.GetCustomAttributes(this.GetType()).ToList().Find(t => t is MetadataTypeAttribute);

        return (attribute != null)
                   ? ((MetadataTypeAttribute)attribute).MetadataClassType
                   : null;
    }

    public virtual List<ValidationResult> IsValid()
    {
        var validationErrors = new List<ValidationResult>();
        var context = new ValidationContext(this, null, null);
        Validator.TryValidateObject(this, context, validationErrors, true);

        return validationErrors;
    }
}
[TestMethod]
当带有元数据的属性无效时,public void IsValid返回ValidationResult错误
{
var sut=新用户
{
Login=“太长!!!”
};
var-actual=sut.IsValid();
Assert.IsNotNull(实际值);
断言.AreEqual(1,实际.Count);
Assert.AreEqual(1,实际[0].MemberNames.Count());
var firstValidationError=实际值[0];
AreEqual(“Login”,firstValidationError.MemberNames.First());
AreEqual(“字段登录必须是最大长度为4的字符串。”,firstValidationError.ErrorMessage);
}
[测试方法]
当包含元数据的属性有效时,public void IsValid\u返回\u Empty\u错误列表\u
{
var sut=新用户
{
Login=“abcd”
};
var-actual=sut.IsValid();
Assert.IsNotNull(实际值);
Assert.AreEqual(0,实际的.Count);
}
[元数据类型(typeof(UserMetaData))]
公共部分类用户:BaseEntity
{
公共字符串登录{get;set;}
公共类用户元数据
{
[必需]
[第(4)款]
公共字符串登录{get;set;}
}
}
公共抽象类BaseEntity
{
受保护的BaseEntity()
{
RegisterMetadata();
}
私有无效注册表元数据()
{
var currentType=GetType();
var metadataType=GetMetadataType();
if(metadataType==null)
返回;
var descriptorProvider=新关联的MetadataTypeDescriptionProvider(currentType,metadataType);
AddProviderTransparent(描述符提供者,currentType);
}
私有类型GetMetadataType()
{
var attribute=attribute.GetCustomAttributes(this.GetType()).ToList().Find(t=>t是MetadataTypeAttribute);
返回(属性!=null)
((MetadataTypeAttribute)属性)。MetadataClassType
:null;
}
公共虚拟列表有效()
{
var validationErrors=新列表();
var context=newvalidationcontext(this,null,null);
TryValidateObject(this,context,validationErrors,true);
返回验证错误;
}
}
    [TestMethod]
    public void IsValid_Returns_ValidationResult_Errors_When_Properties_With_Meta_Data_Are_Not_Valid()
    {
        var sut = new User
                      {
                          Login = "too long!!!"
                      };

        var actual = sut.IsValid();

        Assert.IsNotNull(actual);
        Assert.AreEqual(1, actual.Count);
        Assert.AreEqual(1, actual[0].MemberNames.Count());
        var firstValidationError = actual[0];
        Assert.AreEqual("Login", firstValidationError.MemberNames.First());
        Assert.AreEqual("The field Login must be a string with a maximum length of 4.", firstValidationError.ErrorMessage);
    }

    [TestMethod]
    public void IsValid_Returns_Empty_List_Of_Errors_When_Properties_With_Meta_Data_Are_Valid()
    {
        var sut = new User
                      {
                          Login = "abcd"
                      };

        var actual = sut.IsValid();

        Assert.IsNotNull(actual);
        Assert.AreEqual(0, actual.Count);
    }

[MetadataType(typeof(UserMetaData))]
public partial class User : BaseEntity
{
    public string Login { get; set; }

    public class UserMetaData
    {
        [Required]              
        [StringLength(4)]       
        public string Login { get; set; }
    }
}

public abstract class BaseEntity
{
    protected BaseEntity()
    {
        RegisterMetadata();
    }

    private void RegisterMetadata()
    {
        var currentType = GetType();

        var metadataType = GetMetadataType();

        if (metadataType == null)
            return;

        var descriptorProvider = new AssociatedMetadataTypeTypeDescriptionProvider(currentType, metadataType);
        TypeDescriptor.AddProviderTransparent(descriptorProvider, currentType);
    }

    private Type GetMetadataType()
    {
        var attribute = Attribute.GetCustomAttributes(this.GetType()).ToList().Find(t => t is MetadataTypeAttribute);

        return (attribute != null)
                   ? ((MetadataTypeAttribute)attribute).MetadataClassType
                   : null;
    }

    public virtual List<ValidationResult> IsValid()
    {
        var validationErrors = new List<ValidationResult>();
        var context = new ValidationContext(this, null, null);
        Validator.TryValidateObject(this, context, validationErrors, true);

        return validationErrors;
    }
}