2009-11-24 2 views
10

필자는 testmethod를 작성하는 데 도움이 필요합니다 ...Moq-mocked 메서드가 null을 반환 한 이유는 무엇입니까?

사용자가 자신의 프로필을 표시 할 수 있는지 테스트해야하지만 조롱 한 GetProfileFromUserName 메서드를 사용하려고하면 오류가 발생합니다. 메소드는 null을 리턴합니다. 이해가 안되는 점은 GetEmail이라는 비슷한 메서드가 기본적으로 동일하고 작동한다는 것입니다.

작업 나던 프로필을 검색하기위한 코드입니다 :

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

을 그리고 이것은 작동하는 이메일을 검색하기위한 코드입니다.

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

그리고 이것은 모의 통화 및 반환 프로필 대신에 널 (null) 방법의 조각입니다 :

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

내가 잘못 뭐하는 거지? GetProfileFromUserName의 userProfile.UserName을 It.IsAny()로 바꿉니다.

+0

'It.IsAny ()'을 사용하면 어떻게됩니까? –

답변

11

null을 반환하면 Setup이 실제 호출과 일치하지 않는다는 의미입니다. userProfile.UserName에 설치 라인에서 올바른 값 이 포함되어 있는지 확인하십시오.

또한 일치하지 않는 전화를 감지하려면 mockUserRepositoryMockBehavior.Strict 옵션으로 만드십시오.

희망이 도움이됩니다.

mockUserRepository.Setup(gp => gp.GetProfileFromUserName(userProfile.UserName)) 
    .Returns(() => new Profile { ProfileID = userProfile.ProfileID }); 
: 테스트 설정 ("배열")의 시간에 존재하지 않는 개체를 반환하려고하는 사람을 위해
+0

컴파일 된 메소드가 moq와 일치하지 않으므로 암시 적 캐스트 연산자를 사용하고 있다는 사실이 나에게 발생했습니다. –

0

이 솔루션은 대리인 (Func을 <>) 오버로드를 사용하는 것입니다
관련 문제