Атрибут StringLength Не проверяет, почему моя реализация - PullRequest
0 голосов
/ 31 мая 2019

Я использовал Это , чтобы сделать мою собственную реализацию проверки данных с использованием атрибутов. Тем не менее, когда я запускаю модульный тест, он не проходит

Юнит тест:

      [TestMethod]
      public void CheckAttributes_StringLengthAttribute_ShouldAddErrorIfToManyCharacters()
      {
           //Arrange
           _model.FirstName = "asdf";
           _model.LastName = "abcdefghijklmnopqrstuvwxyz";

           //Act
           _abstractModelValidation.CheckMyAttributes(_model);

           //Assert
           Assert.IsFalse(_abstractModelValidation.IsValid);
      }

только к вашему сведению _abstractModelValidation.IsValid = Errors.Any();

Моя реализация по вышеуказанной ссылке:

      protected void CheckAttributes(T model)
      {
           var context = new ValidationContext(model, null, null);
           var results = new List<ValidationResult>();

           var isValid = Validator.TryValidateObject(model, context, results);
           if (!isValid)
           {
                foreach (var validationResult in results)
                {
                     foreach (var memberName in validationResult.MemberNames)
                     {
                          AddError(memberName, validationResult.ErrorMessage);
                     }
                }
           }
      }

Модель класса:

 public class ValidatorModel
 {
      public int Id { get; set; }

      [StringLength(25), Required]
      public string FirstName { get; set; }

      [StringLength(9, MinimumLength = 9)]
      public string LastName { get; set; }

 }

Просто к вашему сведению [Required] добавляет ошибку

Может кто-нибудь подскажет пожалуйста, что я и не так делаю?

Спасибо!

1 Ответ

0 голосов
/ 31 мая 2019

Я выяснил свою проблему;Я надеюсь, что это поможет кому-то еще!

Проблема в том, что произошла другая перегрузка, которая является логическим свойством validateAllProperties.Изменив это на правду, сделал это!

      protected void CheckAttributes(T model)
      {
           var context = new ValidationContext(model, null, null);
           var results = new List<ValidationResult>();

           var isValid = Validator.TryValidateObject(model, context, results, true);
           if (!isValid)
           {
                foreach (var validationResult in results)
                {
                     foreach (var memberName in validationResult.MemberNames)
                     {
                          AddError(memberName, validationResult.ErrorMessage);
                     }
                }
           }
      }
...