Свободная проверка с использованием NotEmpty для целочисленного свойства

У меня есть следующий код:

public class NewsEditViewDataValidator : AbstractValidator<NewsEditViewData>
{
     public NewsEditViewDataValidator()
     {
          // Status unique identifier cannot be empty
          // Status unique identifier must be greater or equal to 1
          RuleFor(x => x.StatusId)
               .NotEmpty()
               .WithMessage("Status is required")
               .GreaterThanOrEqualTo(1)
               .WithMessage("Status unique identifier must be greater or equal to 1");

          // Other rule sets
     }
}

StatusId — целое число. Как в этом случае работает NotEmpty? Что это подтверждает? Целые числа или строка? Как будет выглядеть модульный тест для этой части проверки того, что целое число не является пустым?

Это используется для проверки раскрывающегося списка в моем приложении MVC 3. Проверка хорошо работает на представлении. Часть GreaterThanOrEqualTo заключается в том, что уникальный идентификатор статуса никогда не может быть меньше 1. Это я хочу активировать для проверки моего объекта. Когда это так, NotEmpty также не сработает? Есть ли предпочтения относительно того, кто из них будет уволен первым? Если StatusId равен 0, какой набор правил сработает? Если это -1? Я хотел бы, чтобы NotEmpty работал с представлением и GreaterThanOrEqualTo при проверке идентификатора бизнес-объекта. Какие-либо предложения?


person Brendan Vogt    schedule 02.02.2011    source источник


Ответы (3)


Посмотрите документацию:

Непустой валидатор

Описание: Гарантирует, что указанное свойство не равно null, пустой строке или пробелу (или значению по умолчанию для типов значений, например 0 для int).

Таким образом, NotEmpty() будет избегать только значения по умолчанию (0) для этого свойства.

person rsenna    schedule 02.02.2011
comment
Посмотрите еще раз на мой вопрос. Если я передам 0 идентификатору, какое из правил сработает первым, поскольку оба правила сработают, если будет 0. Как узнать порядок предпочтения? - person Brendan Vogt; 03.02.2011
comment
Я собираюсь принять этот ответ, но в будущем постараюсь ответить на вопрос, а не на половину вопроса. - person Brendan Vogt; 04.02.2011
comment
@Brendan Vogt: 1) На самом деле ваш вопрос состоит из 9 отдельных вопросов, и по крайней мере на 7 из них отвечает только приведенная выше цитата. 2) Мне неизвестен порядок разрешения, но я предполагаю, что это будет тот же порядок, который вы использовали при объявлении правил (и вы знаете, что можете отлаживать это, да?). 3) Вы как будто расстроены моим ответом, что странно, так как я не имел в виду никакой обиды. 4) А если мой ответ вас не устроил, то не принимайте его. В конце концов, поэтому существует SO - мы должны принимать только те ответы, которые нас устраивают. - person rsenna; 05.02.2011

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

StatusId это integer. Как NotEmpty работает в этом случае? Что это подтверждает?

Что значение StatusId является значением по умолчанию для своего типа. (0)

Целые числа или строка?

Тип для StatusId, int.

Как будет выглядеть модульный тест для этой части проверки того, что integer не пуст?

var validator = new NewsEditViewDataValidator();
validator.ShouldHaveValidationErrorFor(x => x.StatusID, 0);

Это используется для проверки раскрывающегося списка в моем приложении MVC 3. Проверка хорошо работает на представлении. Часть GreaterThanOrEqualTo заключается в том, что уникальный идентификатор статуса никогда не может быть меньше 1. Это я хочу вызвать для проверки моего объекта. Когда так NotEmpty тоже не сработает?

Используйте, когда или если, чтобы указать, когда правила должны или не должны быть проверены.

Есть ли предпочтения относительно того, кто из них будет уволен первым?

Я полагаю, что это в том порядке, в котором вы их указали.

Если StatusId равно 0, какой набор правил сработает?

В зависимости от того, какой параметр каскада вы установили, проверка завершится ошибкой при первой ошибке или при проверке других правил для свойства.

 If it is -1?

Второе правило не работает.

Я хотел бы, чтобы NotEmpty работал с представлением и GreaterThanOrEqualTo при проверке идентификатора бизнес-объекта. Какие-либо предложения?

person Pavense    schedule 26.04.2011

@Brendan Vogt
используйте NotNull() вместо NotEmpty()

person Rohidas Kadam    schedule 06.04.2015