2016-05-04 7 views
1

Ich möchte die nächste Funktion in Java mit EasyMock, Mock oder Mockito testen. Ich möchte testen, wenn ich die LeerCantPueblos() -Funktion aufrufen, wird die Abfrage ("SELECT conarpueblos()") ausgeführt.Fehler beim Testen der SQL-Abfrage mit Mockito in Java

private void leerCantPueblos(){ 
     cantPueblosBD = leerBD.cantidadPueblos(); 
     try { 
      while(cantPueblosBD.next()){ 
       CANTIDADPUEBLOS = cantPueblosBD.getInt("contarpueblos"); 
      } 
     } catch (SQLException e) {e.printStackTrace();} 
    } 

Dieser Funktionsaufruf zu CantidadPueblos(), das ist die nächste Funktion.

public ResultSet cantidadPueblos() { 
     try { 
      sentencia = conexion.createStatement(); 
      ResultSet cantidadPueblos = sentencia.executeQuery("SELECT contarpueblos()"); 
      return cantidadPueblos; 
     } catch (SQLException e) {} 

     return null; 
    } 

Ich versuche mit dem nächsten JUnit-Test aber wirft Nullpointer

package tests; 

import java.sql.Connection; 
import java.sql.SQLException; 
import java.sql.Statement; 

import org.easymock.Mock; 
import org.junit.Before; 
import org.junit.Test; 
import org.mockito.InjectMocks; 
import org.mockito.Mockito; 
import org.mockito.MockitoAnnotations; 

import server.ConexionBD; 

public class TestBD { 

    @InjectMocks 
     ConexionBD conexionDB; 

     @Mock 
     Connection conexion; 

     @Mock 
     Statement sentencia; 

     @Before 
     public void setup() throws SQLException { 
      MockitoAnnotations.initMocks(this); 
      //Mockito.initMocks(this); 
      Mockito.when(conexion.createStatement()).thenReturn(sentencia); 
     } 

     @Test 
     public void cantidadPueblos_shouldExecuteQuery() throws SQLException { 
      conexionDB.cantidadPueblos(); 

      Mockito.verify(sentencia).executeQuery("SELECT contarpueblos()"); 
     } 
} 

Die nächste Reihe fehlschlagen:

Mockito.when(conexion.createStatement()).thenReturn(sentencia); 
+0

Sentencia wird zurückgegeben, wenn createStatement auf conexion aufgerufen wird, aber Sentencia wird nie initialisiert. Es ist null! –

+0

Und wie kann ich initialisieren? Sentencia = null? oder muss ich die Aussage zuerst erstellen? Ich bin neu in JUnit und spöttisch .. @RahulSharma –

+0

Könnten Sie den vollständigen Code des Tests hinzufügen? d. h. Klassendeklaration, Importe – Evgeny

Antwort

1

Der Test mit Ausnahme der ersten Zeile von setup Methode gut aussieht.

public void setup() throws SQLException { 
    sentencia = conexion.createStatement(); 
    MockitoAnnotations.initMocks(this); 
    //Mockito.initMocks(this); 
    Mockito.when(conexion.createStatement()).thenReturn(sentencia); 
} 

Es wirft NPE als conexion.createStatement() aufgerufen wird, bevor Mocks initialisiert werden. Entfernen Sie einfach sentencia = conexion.createStatement(); Zeile, es ist hier überflüssig.


UPDATE
Es stellte sich heraus, dass falsche Import verwendet wird. import org.easymock.Mock sollte ersetzt werden durch import org.mockito.Mock;

+0

Ich bekomme Nullzeiger Ausnahme hier: Mockito.when (conexion.createStatement()). thenReturn (sentencia); wenn ich sentencia = conexion.createStatement() entferne. Ich bekomme eine Nullzeiger-Ausnahme für. @ evgeny –

+0

@Asier Es ist unmöglich, dass 'sentencia = conexion.createStatement();' nicht NPE verursacht und 'Mockito.when (conexion.createStatement()). thenReturn (sentencia);' verursacht es. Hast du die letzte Testversion in der Frage angegeben? – Evgeny

+0

Ich lege jetzt die endgültige Version, und wenn ich es ausführe, wirft es java.lang.NullpointerException und darunter ist es bei TestBD.setup (TestBD.java:31), und die Zeile 31 ist Mockito.when ... @ evgeny –