Как написать тестовый случай для подготовленного утверждения на java с помощью Mockito

#java #junit #mockito #prepared-statement

Вопрос:

Я пытаюсь написать тестовый класс JUnit для функции PreparedStatement, но не могу понять, как это сделать. Я попробовал использовать макет класса данных, но все равно возникла проблема с объектом подключения, так как он равен нулю. Ниже приведен пример класса :

 import java.sql.Clob;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import org.apache.commons.codec.binary.Base64;
import org.springframework.jdbc.core.PreparedStatementCreator;
import com.example.beans.SaveLegacy;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;

@AllArgsConstructor(access = AccessLevel.PUBLIC)
public class InsertAgent implements PreparedStatementCreator {

    /** The query param. */
    private String queryParam;

    /** Input values */
    private SaveLegacy legacy;
    String systemCode;
    Integer documentId;

    @Override
    public PreparedStatement createPreparedStatement(Connection connection) throws SQLException {
      
            Base64 base64Decoder = new Base64();
            Clob clob = connection.createClob();    // Here the object connection is null.
            String decodedFileContent = new String(base64Decoder.decode(legacy.getAssociatedData()));
            clob.setString(1, decodedFileContent);
        PreparedStatement preparedStatement = connection.prepareStatement(queryParam);
        
        preparedStatement.setString(1, legacy.getACode());
                preparedStatement.setString(2, legacy.getGuid());
                preparedStatement.setString(3, systemCode);
                preparedStatement.setClob(4, clob);
                preparedStatement.setString(5, legacy.getAssociatedData());
                preparedStatement.setString(6, legacy.getModifiedByUserId());
                
        return preparedStatement;
    }
}
 

Я новичок в этом, не имею большого представления о том, как написать класс Junit для вышеупомянутого класса.

Ответ №1:

Что-то вроде этого:

 class InsertAgentTest {

 @Test
 public void testCreatePreparedStatement() {
   SaveLegacy saveLegacy = mock(SaveLegacy.class);
   when(saveLegacy.getGuid()).thenReturn("some guid");
   when(saveLegacy.getACode()).thenReturn("code");
   ...
   Connection connection = mock(Connection.class);
   PreparedStatement ps = mock(PreparedStatement.class)
   when(connection.prepareStatement(...)).thenReturn(ps);
   InsertAgent agent = new Insertagent(saveLegacy, ...);
   agent.createPreparedStatement(connection);
   verify(ps).setString(1, "acode");
   ...
 }
}
 

Комментарии:

1. Спасибо, братан! Каков будет импорт для макета в «макете(SaveLegacy.class);» ?

2. org.mockito.Mockito.mock