2017-06-07 6 views
0

Ich habe eine Methode in Presenter, die eine Datenbank aufruft. Jetzt, wenn ich versuche, die Methode zu testen, die tatsächlich mit der Datenbank kommuniziert, gibt es mir NullPointerException.Datenbank NullPointerException beim Testen

Wie gehen wir eigentlich mit solchen Fällen um?

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"); 
} 

Ausnahme:

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

Prüfung der Nullwert aus der zunächst prüfen, die Null wie Datenbank kommen, wenn (userDB.getValueFromSqlite ("Rolle", 1)! = Null) { if ("Tutor" .equalsIgnoreCase (userDB.getValueFromSqlite (“ Rolle ", 1))) view.userRole (" tutor "); sonst view.userRole ("Schüler"); – param

+0

Bitte lesen Sie über [MCVE]. Wir können Ihnen nicht sagen, warum Ihr Testcode eine Ausnahme auslöst, wenn Sie den gesamten Setup-Teil Ihres Komponententests weglassen. Sie zeigen uns nur Teile wesentlicher Elemente. Darüber hinaus: lesen https://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-fix-it – GhostCat

+0

Ich sehe nicht, dass Sie mein Problem verstanden haben, kann mein schlechtes ich sein havent kurz erklärt. Das Problem ist, ich habe eine Methode im Presenter, die Datenbank ruft und auf Antwort ruft es Methode auf View. Als ich anfing, Moderatoren zu testen, erlaubte mir diese UserDB nicht, das zu tun, was ich will und gibt NullPointerException. – Jay

Antwort

1

Sie müssen nur von Ihrem doReturn Satz ändern:

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

zu

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

diese Weise können Sie verspotten würde oder Aufnahme der Aufruf an getValueFromSqlite Methode, anstatt es direkt zu nennen, während das verspottet Verhalten angibt.

+0

Klingt richtig ;-) – GhostCat

+0

ich verstehe nicht, warum beide anders sind? – Jay

+0

Grundsätzlich übergeben Sie in der ersten ein Objekt und in der zweiten übergeben Sie einen _method call_. 'wann' Methode muss wissen, welche bestimmte Methode Sie verspotten. Dies ist im Grunde die Art, wie Sie Mockito verwenden müssen. – alayor

Verwandte Themen