having one function using resultmetadata.
ResultSet rs // coming from some sql query.
ResultSetMetaData rsmd = rs.getMetaData();
if(rsmd.getColumnName(1).toString().equalsIgnoreCase("something"))
{
//do something here
}
i have mocked resultset before, but dont know how to mock resultmetadata or put desired column name in resultset ? i tried :
ResultSetMetaData rsmd = Mockito.mock(ResultSetMetaData.class);
Mockito.when(rsmd.getColumnName(1)).thenReturn("Somwthing");
but it didnt worked
Here is an example of what you need to do:
import org.mockito.Mockito;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import static org.junit.Assert.assertEquals;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.when;
public class Test {
@org.junit.Test
public void test() throws SQLException {
// prepare the dependant mock
ResultSetMetaData rsMetaMock = Mockito.mock(ResultSetMetaData.class);
when(rsMetaMock.getColumnName(eq(1))).thenReturn("something");
// prepare main mock for result set and define when
// main mock to return dependant mock
ResultSet rs = Mockito.mock(ResultSet.class);
when(rs.getMetaData()).thenReturn(rsMetaMock);
// application logic
ResultSetMetaData rsmd = rs.getMetaData();
//assertions
assertEquals(rsmd.getColumnName(1), "something");
}
}