2009-11-24 13 views
10

Potrzebuję pomocy z TestMethod Próbuję napisać ...Dlaczego metoda z kodem Moq zwróciła wartość null?

muszę sprawdzić, czy użytkownik może pokazać swój profil, jednak i wystąpi błąd, gdy próbuję użyć mojego szydzili metodę GetProfileFromUserName. Metody zwracają wartość null. Czego nie rozumiem to to, że mam podobną metodę o nazwie GetEmail, która w zasadzie robi to samo i działa.

Jest to kod do pobierania profil, który robi praca:

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

I jest to kod do pobierania wiadomości e-mail, który działa.

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

A to fragment metody pozornie połączenia i zwraca NULL zamiast na profilu:

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

Co robię źle? Jeśli zamieniam userProfile.UserName w GetProfileFromUserName na It.IsAny();

+0

Co się stanie, jeśli użyjesz 'It.IsAny ()'? –

Odpowiedz

11

Jeśli zwróci wartość null, oznacza to, że numer Setup nie odpowiada faktycznemu wywołaniu. Sprawdź, czy userProfile.UserName zawiera poprawną wartość w wierszu Konfiguracja.

Aby wykryć niedopasowane połączenia, należy utworzyć opcję mockUserRepository za pomocą opcji MockBehavior.Strict.

Mam nadzieję, że to pomoże.

+0

Zdarzyło mi się, że używałem niejawnego operatora obsady, więc metoda została skompilowana, ale moq nie pasuje do połączenia. –

0

Dla każdego, kto stara się powrócić do obiektu, który nie istnieje w momencie konfiguracji testowej („Arrange”), rozwiązaniem jest użycie delegata (FUNC <>) przeciążenie:

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