2016-05-04 14 views
1

EasyMock、Mock、またはMockitoを使用してjavaで次の関数をテストします。 leerCantPueblos()関数を呼び出すと、クエリ( "SELECT conarpueblos()")が実行されることをテストします。Javaでmockitoを使用してSQLクエリをテストする際のエラー

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

この関数は、次の関数であるcantidadPueblos()を呼び出します。

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

     return null; 
    } 

私は次のJUnitテストをしてみてくださいしかし、NullPointerExceptionが

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

次の行は失敗スロー:

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

conexionでcreateStatementが呼び出されたときにsentenciaが返されますが、sentenciaは決して初期化されません。それはヌルです! –

+0

そして、私はどのように初期化できますか?sentencia = null?最初に文を作成する必要がありますか?私はJUnitを新しくしています。@ RahulSharma –

+0

テストの完全なコードを追加できますか?すなわち、クラス宣言、インポート – Evgeny

答えて

1

テストはsetupメソッドの最初の行のを除いてよさそうです。

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

モックが初期化される前にconexion.createStatement()が呼び出されるように、それはNPEをスローします。 sentencia = conexion.createStatement();行を削除するだけで、ここでは冗長です。


UPDATE
それは間違ってインポートが使用されていることが判明しました。 import org.easymock.Mockimport org.mockito.Mock;に置き換えてください。

+0

ここでnullポインタの例外が発生します:Mockito.when(conexion.createStatement())。then return(sentencia); sentencia = conexion.createStatement()を削除した場合。私はnullポインタの例外を取得します。 @evgeny –

+0

@Asier 'sentencia = conexion.createStatement();'はNPEと 'Mockito.when(conexion.createStatement())、thenReturn(sentencia);の原因にはなりませんでした。あなたは質問の最終テスト版を提供しましたか? – Evgeny

+0

私は最終版を入れました。実行するとjava.lang.NullpointerExceptionがスローされ、TestBD.setup(TestBD.java:31)にあり、31行目はMockito.when ... @evgeny –

関連する問題