Tengo un atributo de validación de clase de mvc asp.net personalizado. Mi pregunta es ¿cómo puedo probarla en una unidad? Sería una cosa probar que la clase tiene el atributo, pero esto en realidad no probaría esa lógica dentro de él. Esto es lo que quiero probar.¿Cómo puedo probar la unidad de mi atributo de validación personalizada?
[Serializable]
[EligabilityStudentDebtsAttribute(ErrorMessage = "You must answer yes or no to all questions")]
public class Eligability
{
[BooleanRequiredToBeTrue(ErrorMessage = "You must agree to the statements listed")]
public bool StatementAgree { get; set; }
[Required(ErrorMessage = "Please choose an option")]
public bool? Income { get; set; }
..... eliminado por razones de brevedad }
[AttributeUsage(AttributeTargets.Class)]
public class EligabilityStudentDebtsAttribute : ValidationAttribute
{
// If AnyDebts is true then
// StudentDebts must be true or false
public override bool IsValid(object value)
{
Eligability elig = (Eligability)value;
bool ok = true;
if (elig.AnyDebts == true)
{
if (elig.StudentDebts == null)
{
ok = false;
}
}
return ok;
}
}
He tratado de escribir una prueba de la siguiente manera, pero esto no funciona:
[TestMethod]
public void Eligability_model_StudentDebts_is_required_if_AnyDebts_is_true()
{
// Arrange
var eligability = new Eligability();
var controller = new ApplicationController();
// Act
controller.ModelState.Clear();
controller.ValidateModel(eligability);
var actionResult = controller.Section2(eligability,null,string.Empty);
// Assert
Assert.IsInstanceOfType(actionResult, typeof(ViewResult));
Assert.AreEqual(string.Empty, ((ViewResult)actionResult).ViewName);
Assert.AreEqual(eligability, ((ViewResult)actionResult).ViewData.Model);
Assert.IsFalse(((ViewResult)actionResult).ViewData.ModelState.IsValid);
}
El ModelStateDictionary
no lo hace contiene la clave para este atributo personalizado. Solo contiene los atributos para los atributos de validación estándar.
¿Por qué es esto?
¿Cuál es la mejor manera de probar estos atributos personalizados?
Doh! ¡Por supuesto! – MightyAtom
¿Es esta la mejor manera de hacer la validación de propiedad cruzada? (Validación del modelo que involucra más de una propiedad) – MightyAtom
manténgalo simple ... intente, si funciona para usted - no hay razón para realizar más pruebas de compex :) –