как смоделировать результат метаданных для тестирования джунта - PullRequest
0 голосов
/ 19 февраля 2020

с одной функцией, использующей метаданные результата.

    ResultSet rs // coming from some sql query.
    ResultSetMetaData rsmd = rs.getMetaData();
    if(rsmd.getColumnName(1).toString().equalsIgnoreCase("something"))
    {
    //do something here
    }

Я уже смоделировал набор результатов, но не знаю, как смоделировать метаданные результата или поместить желаемое имя столбца в набор результатов? я попробовал:

    ResultSetMetaData rsmd = Mockito.mock(ResultSetMetaData.class);
    Mockito.when(rsmd.getColumnName(1)).thenReturn("Somwthing");

но это не сработало

1 Ответ

1 голос
/ 19 февраля 2020

Вот пример того, что вам нужно сделать:

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