2017-06-07 194 views
0

我在Presenter中找到了一個調用數據庫的方法。現在,當我嘗試測試實際與數據庫通信的方法時,它給我NullPointerException數據庫在測試時出現空指針異常

我們該如何處理這類案件?

public void getRoleFromSQLite(){ 
    if ("tutor".equalsIgnoreCase(userDB.getValueFromSqlite("role",1))) 
     view.userRole("tutor"); 
    else 
     view.userRole("student"); 
} 

TEST:

@Test 
public void getRoleFromSqliteDatabaseTest(){ 
    Mockito.doReturn("tutor").when(userDB).getValueFromSqlite("role",1) 
    presenter.getRoleFromSQLite(); 
    Mockito.verify(viewMock).userRole("tutor"); 
} 

例外:

java.lang.NullPointerException 
    at com.dolevel.level.db.UserDB.getValueFromSqlite(UserDB.java:130) 
    at com.dolevel.level.presenters.UserProfileScreenPresenter.getRoleFromSQLite(UserProfileScreenPresenter.java:28) 
    at com.dolevel.level.UserProfileScreenPresenterTest.getRoleFromSqliteDatabaseTest(UserProfileScreenPresenterTest.java:53) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
+0

檢查來自數據庫的空值 首先檢查空像 如果(userDB.getValueFromSqlite( 「角色」,1)!= NULL){ 如果 ( 「家教」 .equalsIgnoreCase(userDB.getValueFromSqlite(」角色「,1))) view.userRole(」tutor「); else view.userRole(「student」); – param

+0

請閱讀[mcve]。我們無法告訴您爲什麼當您遺漏整個單元測試的設置部分時,測試代碼會拋出異常。你只是向我們展示重要元素的一部分。除此之外:閱讀https://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix-it – GhostCat

+0

我沒有看到你明白我的問題,可能是我的壞我沒有解釋簡短的方式..問題是我有一個主持人調用數據庫的方法,並在View上響應調用方法。當我開始測試演示者時,這個被嘲笑的UserDB不允許我做我想做的事情並給出NullPointerException。 – Jay

回答

1

你只需要從改變你的doReturn一句:

Mockito.doReturn("tutor").when(userDB).getValueFromSqlite("role",1) 

Mockito.doReturn("tutor").when(userDB.getValueFromSqlite("role",1)) 

這樣,你會被嘲笑或記錄調用getValueFromSqlite方法,而不是直接調用它,而指定嘲笑行爲。

+0

聽起來正確;-) – GhostCat

+0

我不明白爲什麼兩者都不同? – Jay

+0

基本上,第一個傳遞一個對象,第二個傳遞_method call_。 「何時」方法需要知道你在嘲笑哪種方法。這基本上是你需要使用mockito的方式。 – alayor

相關問題