Проверка модели тестирования без проверки реализации - PullRequest
0 голосов
/ 28 февраля 2011

Каков наилучший способ тестирования валидации модели без предположения о деталях реализации валидации (например, DataAnnotations).

Например, если у меня есть объект модели Customer, который имеетFirstname свойство, я хочу проверить , что привязка отсутствующего значения для свойства Firstname приведет к ошибке проверки, но я не хочу проверять как проверка его былареализованы.То есть я не хочу использовать DataAnotations.Validate.

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

Ответы [ 2 ]

1 голос
/ 28 февраля 2011

В итоге я написал вспомогательный метод, который упаковывает ModelValidator и возвращает IEnumerable<ModelValidationResult>. Это требует, чтобы MVC был настроен с выбранным вами поставщиком проверки, но это означает, что тестовый код не должен изменяться, когда ваша реализация проверки делает:

public static IEnumerable<ModelValidationResult> Validate<TModel>(TModel model)
{
    var modelMetadata = ModelMetadata.FromLambdaExpression(r => r,
        new ViewDataDictionary<TModel>(model));

    ModelValidator validator = ModelValidator.GetModelValidator(
        modelMetadata, new ControllerContext());

    return validator.Validate(model);
}
0 голосов
/ 28 февраля 2011

Это будет зависеть от среды, которую вы используете для проверки ваших моделей. Так что то, что вы спрашиваете, невозможно без учета этого. ASP.NET MVC по умолчанию использует поставщика модели аннотаций данных, который вызывает правила валидации аннотаций данных, и если вы хотите проверить это, вам нужно будет выполнить DataAnnotations.Validate в своих модульных тестах или убедиться, что ваша модель украшена соответствующими атрибуты.

Лично я использую FluentValidation.NET , который предоставляет элегантный способ для модульного тестирования моих валидаторов , так что это не большая проблема.

...