在 java 中使用 mockito 测试 sql 查询时出错
Error testing sql query using mockito in java
我想使用 EasyMock、Mock 或 Mockito 测试 java 中的下一个函数。
我想测试当我调用 leerCantPueblos() 函数时,查询 ("SELECT conarpueblos()") 是否被执行。
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);
除了 setup
方法的第一行,测试看起来不错。
public void setup() throws SQLException {
sentencia = conexion.createStatement();
MockitoAnnotations.initMocks(this);
//Mockito.initMocks(this);
Mockito.when(conexion.createStatement()).thenReturn(sentencia);
}
它抛出 NPE,因为 conexion.createStatement()
在模拟初始化之前被调用。只需删除 sentencia = conexion.createStatement();
行,它在这里是多余的。
更新
原来是用错了import。 import org.easymock.Mock
应替换为 import org.mockito.Mock;
我想使用 EasyMock、Mock 或 Mockito 测试 java 中的下一个函数。 我想测试当我调用 leerCantPueblos() 函数时,查询 ("SELECT conarpueblos()") 是否被执行。
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);
除了 setup
方法的第一行,测试看起来不错。
public void setup() throws SQLException {
sentencia = conexion.createStatement();
MockitoAnnotations.initMocks(this);
//Mockito.initMocks(this);
Mockito.when(conexion.createStatement()).thenReturn(sentencia);
}
它抛出 NPE,因为 conexion.createStatement()
在模拟初始化之前被调用。只需删除 sentencia = conexion.createStatement();
行,它在这里是多余的。
更新
原来是用错了import。
import org.easymock.Mock
应替换为 import org.mockito.Mock;