I'm trying to do some unit tests (I'm learning the topic) on an old project, however I have no idea whatsoever on how to mock a DB (I'm using mockito) and test the doGet
method. (right now I'm pretty much just able to test methods and classes without a db connection)
I have already tried many methods I found on the internet like this
package com.javacodegeeks;
import java.sql.Connection;
import java.sql.Statement;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
public class DBConnectionTest {
@InjectMocks private DBConnection dbConnection;
@Mock private Connection mockConnection;
@Mock private Statement mockStatement;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
}
@Test
public void testMockDBConnection() throws Exception {
Mockito.when(mockConnection.createStatement()).thenReturn(mockStatement);
Mockito.when(mockConnection.createStatement().executeUpdate(Mockito.any())).thenReturn(1);
int value = dbConnection.executeQuery("");
Assert.assertEquals(value, 1);
Mockito.verify(mockConnection.createStatement(), Mockito.times(1));
}
}
But I'm just not sure how to modify it to fit my needs. my code looks like this:
JavaConnectDB.java
import java.sql.Connection;
import java.sql.DriverManager;
public class JavaConnectDb {
public static Connection connectDbH() {
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection("jdbc:oracle:thin:@192.168.0.4:1521:ORCL18", "c##foo", "foo");
} catch (Exception e) {
System.err.println(e);
}
return conn;
}
GetUsuario.java
/**
* Servlet implementation class GetUsuario
*/
@WebServlet("/GetUsuario")
public class GetUsuario extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public GetUsuario() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
getInfoCookies(request,response);
Connection conn = g.co.hosp.JavaConnectDb.connectDbH();
response.setContentType("text/html");
PrintWriter out = response.getWriter();
try{
String sql = "select * from usuario";
OraclePreparedStatement pst = (OraclePreparedStatement) conn.prepareStatement(sql);
OracleResultSet rs = (OracleResultSet) pst.executeQuery();
String outPutTable = "<table><thead><tr><th>ID</th><th>USUARIO_ID</th><th>NOMBRE</th><th>APELLIDO</th><th>USUARIO</th><th>ESPECIALIDAD_ID</th></tr></thead>";
while(rs.next()){
outPutTable += "<tr><td>"+rs.getString(1)+"</td>"+"<td>"+rs.getString(3)+"</td>"+"<td>"+rs.getString(4)+"</td>"+"<td>"+rs.getString(5)+"</td>"+"<td>"+rs.getString(6)+"</td>"+"<td>"+rs.getString(7)+"</td></tr>";
}
outPutTable+="</table>";
out.println(outPutTable);
conn.close();
}catch(Exception e){
System.err.println(e);
}finally{
out.close();
}
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
protected void getInfoCookies(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
Cookie[] cookiesInf = request.getCookies();
if(cookiesInf !=null){
for(Cookie cookie : cookiesInf){
if(cookie.getName().equals("hosp")){
hosp = Integer.parseInt(cookie.getValue());
}
}
}
}
}
I want to run a Unit Test on the doGet
but I'm simply not sure what to do...