C# c语言中验证属性的单元测试#

C# c语言中验证属性的单元测试#,c#,unit-testing,asp.net-web-api,data-annotations,C#,Unit Testing,Asp.net Web Api,Data Annotations,我曾尝试使用Validator对c#模型进行单元测试以进行验证,但它不适用于NewtonSoft属性 下面是我的单元测试: var searchController=new searchController(); var requestModel=新requestModel { Id=“23456”, MobileNumber=“9876543210” }; var results=新列表(); var context=newvalidationcontext(requestModel,null

我曾尝试使用Validator对c#模型进行单元测试以进行验证,但它不适用于NewtonSoft属性

下面是我的单元测试:

var searchController=new searchController();
var requestModel=新requestModel
{
Id=“23456”,
MobileNumber=“9876543210”
};
var results=新列表();
var context=newvalidationcontext(requestModel,null,null);
var isvalid=Validator.TryValidateObject(requestModel,context,results,true);
Assert.IsFalse(isvalid);
这是我的模型:

公共类XYZ
{
[JsonProperty(“mobileNumber”)]
[MinLength(3,ErrorMessage=“MOBILENUMBER\u LENGTH\u MIN”)]
公共字符串MobileNumber{get;set;}
[JsonProperty(“参考编号”)]
[MinLength(3,ErrorMessage=“REFNUMBER\u LENGTH\u MIN”)]
公共字符串RefNumber{get;set;}
[JsonProperty(“subscriberFirstName”)]
[MinLength(3,ErrorMessage=“FIRSTNAME\u LENGTH\u MIN”)]
公共字符串名{get;set;}
}

有人能帮我吗?

改编了乔恩·戴维斯的答案

如果您有这样一个类:

公共类人物
{
[MinLength(3,ErrorMessage=“FIRSTNAME\u LENGTH\u MIN”)]
公共字符串名{get;set;}
[MinLength(3,ErrorMessage=“MOBILENUMBER\u LENGTH\u MIN”)]
公共字符串MobileNumber{get;set;}
}
您可以像这样测试验证结果:

[TestMethod]
public void ModelValidationFailsWithInvalidLength()
{
//安排
var myPerson=newperson()
{
FirstName=“你好”,
MobileNumber=“12”
};
//表演
var validationResults=ValidateModel(myPerson);
//断言
Assert.IsTrue(validationResults.Any(
v=>v.MemberNames.Contains(nameof(Person.FirstName))&&
v、 ErrorMessage.Contains(“FIRSTNAME\u LENGTH\u MIN”);
}
私有IList ValidateModel(对象模型)
{
var validationResults=新列表();
var ctx=新的ValidationContext(model,null,null);
TryValidateObject(model,ctx,validationResults,true);
返回验证结果;
}

它会引发异常,或者无法按预期工作?无法按预期工作。但当我从模型中删除JsonProperty属性时,它就可以完美地工作了。