2009-11-24 12 views
10

Ho bisogno di aiuto con un im TestMethod cercando di scrivere ...Perché il metodo Moq-mocked ha restituito null?

ho bisogno di testare che un utente può mostrare il suo profilo, ma ho incontrato un errore quando provo ad usare il mio metodo GetProfileFromUserName deriso. I metodi restituiscono null. Quello che non capisco è che ho un metodo simile chiamato GetEmail, che fondamentalmente fa lo stesso e funziona.

Questo è il codice per recuperare il profilo, che non lavorare:

mockUserRepository.Setup(gp => gp.GetProfileFromUserName(userProfile.UserName)).Returns(new Profile { ProfileID = userProfile.ProfileID }); 

E questo è il codice per il recupero della posta elettronica, che funziona.

mockUserRepository.Setup(em => em.GetEmail(new MockIdentity("JohnDoe").Name)).Returns("[email protected]"); 

E questo è un frammento del metodo delle chiamate finte e restituisce NULL su, invece di un profilo:

public ActionResult ShowProfile() 
    { 
     var profile = _userRepository.GetProfileFromUserName(User.Identity.Name); 

Che cosa sto facendo di sbagliato? Se sostituisco userProfile.UserName in GetProfileFromUserName in It.IsAny();

+0

Cosa succede se usi 'It.IsAny ()'? –

risposta

11

Se restituisce null, significa che il tuo Setup non corrisponde alla chiamata effettiva. Verificare che il valore userProfile.UserName contenga il valore corretto nella riga di installazione.

Inoltre, per rilevare le chiamate senza corrispondenza, creare il numero mockUserRepository con l'opzione MockBehavior.Strict.

Spero che questo aiuti.

+0

Mi è successo che stavo usando un operatore di cast implicito così il metodo è stato compilato ma moq non corrisponde alla chiamata. –

0

Per qualcuno che sta cercando di restituire un oggetto, che non esiste al momento della configurazione di prova ("Disporre"), la soluzione è quella di utilizzare il delegato (Func <>) di sovraccarico:

mockUserRepository.Setup(gp => gp.GetProfileFromUserName(userProfile.UserName)) 
    .Returns(() => new Profile { ProfileID = userProfile.ProfileID }); 
Problemi correlati