Pregunta

Estoy teniendo un hallazgo información dificultades en lo que espero ser un escenario bastante sencillo. Estoy tratando de probar la unidad de una acción en mi controlador de ASP.NET MVC 2 que utiliza un modelo de entrada personalizado w / DataAnnotions. Mi marco de pruebas es xUnit, como se ha mencionado en el título.

Aquí es mi costumbre Modelo de entrada

public class EnterPasswordInputModel
{
    [Required(ErrorMessage = "")]
    public string Username { get; set; }

    [Required(ErrorMessage = "Password is a required field.")]
    public string Password { get; set; }
}

Y aquí está mi controlador (sacó algo de lógica para simplificar para este ex.):

[HttpPost]
public ActionResult EnterPassword(EnterPasswordInputModel enterPasswordInput)
{
    if (!ModelState.IsValid)
        return View();

    // do some logic to validate input
    // if valid - next View on successful validation
        return View("NextViewName");
    // else - add and display error on current view
        return View();
}

Y aquí está mi xUnit Hecho (también simplificada):

[Fact]
public void EnterPassword_WithValidInput_ReturnsNextView()
{
    // Arrange
    var controller = CreateLoginController(userService.Object);

    // Act
    var result = controller.EnterPassword(
        new EnterPasswordInputModel
            {
                Username = username, Password = password
            }) as ViewResult;

    // Assert
    Assert.Equal("NextViewName", result.ViewName);
}

Cuando ejecuto mi prueba me sale el siguiente error en mi prueba de hecho cuando se trata de recuperar el resultado controlador (sección de la Ley):

System.NullReferenceException: Object reference not set to an instance of an object.

Gracias de antemano por cualquier ayuda que puede ofrecer!

¿Fue útil?

Solución

creo que estoy en el camino a una solución sin embargo. Aquí está el cambio que hice a mi controlador:

ORIGINAL

if (!ModelState.IsValid)
    return View();

Actualización

if (!TryUpdateModel(loginInput))
            return View();

Parece que no fue modelo de unión que se produce durante mi prueba. Parece ser que el enlace de modelos no se produce a menos que ocurra un POST. Al forzar el intento vinculante yo era capaz de conseguir la prueba de pasar modelo.

Nota: . También hubo un error en mi acción que estaba causando mi referencia nula original que hice al tratar de averiguar por qué no se está validando mi modelo

Referencia: http: // bradwilson.typepad.com/blog/2010/01/input-validation-vs-model-validation-in-aspnet-mvc.html

Otros consejos

Esta eliminación de referencias a una instancia dentro de su nula acción del controlador. Es probable que en el código que sacó a "simplificar" la cuestión. Mira la pila de llamadas en los resultados de las pruebas para averiguar qué. Es posible que necesite algo para simulacro de la prueba.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top