#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