我想用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);
在conexion上調用createStatement時將返回sentencia,但sentencia永遠不會初始化。它是空的! –
如何初始化?sentencia = null?或者我必須先創建聲明?我是JUnit和嘲笑的新手.. @RahulSharma –
您能添加完整的測試代碼嗎?即類聲明,進口 – Evgeny