2013-12-15 7 views
0

아래 클래스에 대한 단위 테스트를 실행할 때 주석에 의해 NullPointerException이 표시됩니다. 나는 여기서 간단한 것을 놓치고 있다는 느낌을 가지고있다. 나는 Mockito 1.9.5를 사용하고 있습니다. 조롱 된 방법 중 어느 것도 최종 사항이 아닙니다.조롱 된 클래스의 메소드를 호출 할 때 NullPointerException이 발생했습니다.

MockitoAnnotations.initMocks(this); 

위는 @Mock 주석이 작동하는 것이 필요한 전화 :

public class UserBOTest { 

    @Mock private IUserDAO userDao; 

    @InjectMocks private IUserBO userBo = new UserBO(); 

    @Test 
    public void testRegister() throws DBException { 
     when(userDao.doesEmailExist(any(String.class))).thenReturn(false); //NULLPOINTEREXCEPTION HERE 
     when(userDao.saveOrUpdate(Matchers.<User>any())).thenReturn(true); 
     Assert.assertEquals(userBo.registerUser("user", "pwd", "email", ""), Constants.General.OK); 
    } 

} 

스택 추적 : 다음 없기 때문에

java.lang.NullPointerException 
    at com.dbcreator.services.bo.UserBOTest.testRegister(UserBOTest.java:25) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 

답변

3

모의 객체 자체가 null 인 것으로 보이므로 일부 초기화가 누락되었다고 생각합니다. 당신이해야 MockitoJUnitRunner를 사용하는 경우

MockitoAnnotations.initMocks(testClass); 

:

@Mock 주석을 사용하려면, 당신은 모의 주석을 초기화 호출이 필요합니다 테스트 또는 테스트 러너 어딘가에 필요 너를 위해 끝내라.

+0

예, 정확히 내가 누락 된 내용입니다. @RunWith (MockitoJUnitRunner.class)를 포함하는 것을 잊었습니다. 고맙습니다. – Zyga

3

userDao은 null입니다. 테스트를 통해 선언 된 모의 객체를 실제로 삽입하도록 Mockito에게 지시해야합니다.

@Before 
public void prepare() { 
    MockitoAnnotations.initMocks(this); 
} 

주석은 메타 데이터 일 뿐이라는 것을 기억하십시오. 그들은 아무 것도하지 않습니다. 도구를 사용하면 도구를 사용하여 그 (것)들에게 무언가를 할 수 있습니다. 이 경우,이 도구는 MockitoAnnotations.initMocks()입니다.이 도구는 테스트 개체의 필드를 읽고, 주석을 검사하고, mock을 작성/삽입합니다.

관련 문제