2013-12-15 58 views
0

當我爲下面的類運行單元測試時,我得到註釋所指示的NullPointerException。我有一種感覺,我在這裏錯過了一些簡單的東西。我正在使用Mockito 1.9.5,所有嘲笑的方法都不是最終的。調用模擬類的方法時出現NullPointerException

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

由於它看起來你的模擬對象本身是空的,我猜你缺少一些初始化。

爲了使用@Mock註解,你的地方需要在測試或在您的測試運行,你需要有一個初始化模擬註釋的呼叫:

MockitoAnnotations.initMocks(testClass); 

如果使用MockitoJUnitRunner這應該爲你完成。

+0

是的,那正是我一直想念的。我忘了包含@RunWith(MockitoJUnitRunner.class)。謝謝。 – Zyga

3

您的userDao爲空。你需要告訴給的Mockito實際上做

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

記住,註釋只有注入的元數據在測試中聲明的嘲笑。他們什麼都不做。一個工具可以使用它們來做一些感謝他們。在這種情況下,該工具是MockitoAnnotations.initMocks(),它讀取測試對象的字段,檢查註釋以及創建/注入模擬。

相關問題