Domanda

Sto avendo un momento difficile trovare informazioni su ciò che mi aspetto di essere un abbastanza semplice scenario.Sto cercando di unità di prova di un'Azione sul mio ASP.NET Mvc 2 Controller che utilizza un input personalizzato modello w/ DataAnnotions.Il mio framework di test è xUnit, come indicato nel titolo.

Ecco la mia custom Modello Di Input:

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

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

E qui è il mio Controller (ha preso un po ' di logica per semplificare per questo 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();
}

E qui è il mio xUnit Fatto (anche semplificata):

[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);
}

Quando ho eseguito il mio test ottengo il seguente errore sul mio test fatto quando si cerca di recuperare il controller di risultato (Act sezione):

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

Grazie in anticipo per qualsiasi aiuto che si può offrire!

È stato utile?

Soluzione

Penso di essere in pista per una soluzione però.Qui è il cambiamento che ho fatto per il mio controller:

Originale

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

Aggiornato

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

Sembra che il modello di associazione non è stato che si verificano durante il mio test.Sembra che il modello di associazione non avviene, a meno che un POST si verifica.Forzando il tentativo di associazione del modello sono stato in grado di ottenere il test per passare.

Nota:C'era anche un errore nella mia azione che è stata la causa della mia null originale di riferimento che mi ha causato durante il tentativo di capire perché il mio modello non era stato convalidato.

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

Altri suggerimenti

Stai dereferencing un'istanza nulla all'interno della vostra azione del controller. Probabilmente nel codice che tirò fuori a "semplificare" la questione. Guardate lo stack di chiamate nei risultati del test per capire cosa. Potrebbe essere necessario qualcosa di finto per il test.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top