2009-11-24 15 views
10

Necesito ayuda con un im TestMethod tratando de escribir ...¿Por qué un método Moq-mocked devuelve nulo?

necesito para probar que un usuario puede mostrar su perfil, sin embargo me encuentro con un error cuando trato de usar mi método GetProfileFromUserName burlado. El método devuelve nulo. Lo que no entiendo es que tengo un método similar llamado GetEmail, que básicamente hace lo mismo y funciona.

Este es el código para recuperar el perfil, lo que no funciona:

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

Y este es el código para recuperar el correo electrónico, el cual trabaja.

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

Y este es un fragmento del método de las llamadas simuladas y vuelve nulo en lugar de un perfil:

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

¿Qué estoy haciendo mal? Si reemplazo userProfile.UserName en GetProfileFromUserName por It.IsAny();

+0

¿Qué sucede si usa 'It.IsAny ()'? –

Respuesta

11

Si devuelve nulo, significa que su Setup no coincide con la llamada real. Compruebe que el userProfile.UserName contiene el valor correcto en la línea de configuración.

Además, para detectar las llamadas incomparables crear su mockUserRepository con la opción MockBehavior.Strict.

Espero que esto ayude.

+0

Me sucedió que estaba usando un operador implícito de conversión para que el método compilado pero moq no coincidiera con la llamada. –

0

Para alguien que está tratando de devolver un objeto, que no existe en el momento de la configuración de la prueba ("Organizar"), la solución es utilizar el delegado (Func <>) Sobrecarga:

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