我试图使用Validator对c#模型的验证进行单元测试,但它不能使用NewtonSoft属性。有人可以帮我这个吗?
var searchController = new SearchController();
var requestModel = new RequestModel
{
Id = "23456",
MobileNumber = "9876543210"
};
var results = new List<ValidationResult>();
var context = new ValidationContext(requestModel, null, null);
var isvalid = Validator.TryValidateObject(requestModel, context, results,true);
Assert.IsFalse(isvalid);
我也上传了我的模型类
public class XYZ
{
[JsonProperty("mobileNumber")]
[MinLength(3, ErrorMessage = "MOBILENUMBER_LENGTH_MIN")]
public string MobileNumber { get; set; }
[JsonProperty("refNumber")]
[MinLength(3, ErrorMessage = "REFNUMBER_LENGTH_MIN")]
public string RefNumber { get; set; }
[JsonProperty("subscriberFirstName")]
[MinLength(3, ErrorMessage = "FIRSTNAME_LENGTH_MIN")]
public string FirstName { get; set; }
}
答案 0 :(得分:0)
根据 Unit Testing ASP.NET DataAnnotations validation
改编 Jon Davis 的回答如果您有这样的课程:
public class Person
{
[MinLength(3, ErrorMessage = "FIRSTNAME_LENGTH_MIN")]
public string FirstName { get; set; }
[MinLength(3, ErrorMessage = "MOBILENUMBER_LENGTH_MIN")]
public string MobileNumber { get; set; }
}
您可以像这样测试验证结果:
[TestMethod]
public void ModelValidationFailsWithInvalidLength()
{
// arrange
var myPerson = new Person()
{
FirstName = "Hi",
MobileNumber = "12"
};
// act
var validationResults = ValidateModel(myPerson);
// assert
Assert.IsTrue(validationResults.Any(
v => v.MemberNames.Contains(nameof(Person.FirstName)) &&
v.ErrorMessage.Contains("FIRSTNAME_LENGTH_MIN")));
}
private IList<ValidationResult> ValidateModel(object model)
{
var validationResults = new List<ValidationResult>();
var ctx = new ValidationContext(model, null, null);
Validator.TryValidateObject(model, ctx, validationResults, true);
return validationResults;
}