Testando o driver JDBC da Databricks
Este artigo descreve como testar o código que usa o driverDatabricks JDBC .
Para testar o código que usa o Databricks JDBC Driver junto com uma coleção de propriedades de conexão, o senhor pode usar qualquer estrutura de teste para linguagens de programação que suportem JDBC. Por exemplo, o exemplo de código Java a seguir usa o JUnit e o Mockito para automatizar e testar o driver JDBC da Databricks em relação a uma coleção de propriedades de conexão. Este código de exemplo é baseado no código de exemplo em Configurações de autenticação para o driver JDBC da Databricks.
O arquivo de código de exemplo a seguir, denominado Helpers.java
, contém várias funções que automatizam o Databricks JDBC Driver em relação a uma coleção de propriedades de conexão:
A função
CreateConnect
usa uma coleção de propriedades de conexão para abrir uma conexão por meio de um recurso Databricks compute .A função
SelectNYCTaxis
usa a conexão para selecionar o número especificado de linhas de dados da tabelatrips
no esquemanyctaxi
do catálogosamples
.A função
PrintResultSet
imprime o conteúdo das linhas de dados na tela.
// Helpers.java
import java.sql.*;
import java.util.Properties;
public class Helpers {
static Connection CreateConnection(
String url,
Properties p
) throws SQLException {
Connection conn = DriverManager.getConnection(url, p);
return conn;
}
static ResultSet SelectNYCTaxis(
Connection conn,
long rows
) throws SQLException {
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM samples.nyctaxi.trips LIMIT " + rows);
return rs;
}
static void PrintResultSet(ResultSet rs) throws SQLException {
ResultSetMetaData md = rs.getMetaData();
String[] columns = new String[md.getColumnCount()];
for (int i = 0; i < columns.length; i++) {
columns[i] = md.getColumnName(i + 1);
}
while (rs.next()) {
System.out.print("Row " + rs.getRow() + "=[");
for (int i = 0; i < columns.length; i++) {
if (i != 0) {
System.out.print(", ");
}
System.out.print(columns[i] + "='" + rs.getObject(i + 1) + "'");
}
System.out.println(")]");
}
}
}
O arquivo de código de exemplo a seguir, denominado Main.class
, chama as funções do arquivo Helpers.class
:
package org.example;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;
public class Main {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
Class.forName("com.databricks.client.jdbc.Driver");
String url = "jdbc:databricks://" + System.getenv("DATABRICKS_SERVER_HOSTNAME") + ":443";
Properties p = new Properties();
p.put("httpPath", System.getenv("DATABRICKS_HTTP_PATH"));
p.put("AuthMech", "3");
p.put("UID", "token");
p.put("PWD", System.getenv("DATABRICKS_TOKEN"));
Connection conn = Helpers.CreateConnection(url, p);
ResultSet rs = Helpers.SelectNYCTaxis(conn, 2);
Helpers.PrintResultSet(rs);
}
}
O arquivo de código de exemplo a seguir, denominado HelpersTest.class
, usa o JUnit para testar a função SelectNYCTaxis
no arquivo Helpers.class
. Em vez de usar o tempo e o custo do recurso compute real para chamar a função no arquivo Helpers.class
, o código de exemplo a seguir usa o Mockito para simular essa chamada. Chamadas simuladas como essa são normalmente concluídas em apenas alguns segundos, aumentando a confiança do senhor na qualidade do seu código sem alterar o estado da sua conta ou espaço de trabalho existente no site Databricks.
package org.example;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
import static org.junit.jupiter.api.Assertions.assertEquals;
public class HelpersTest {
@Test
public void testSelectNYCTaxis() throws SQLException {
Connection mockConnection = Mockito.mock(Connection.class);
Statement mockStatement = Mockito.mock(Statement.class);
ResultSet mockResultSet = Mockito.mock(ResultSet.class);
Mockito.when(mockConnection.createStatement()).thenReturn(mockStatement);
Mockito.when(mockStatement.executeQuery(Mockito.anyString())).thenReturn(mockResultSet);
ResultSet rs = Helpers.SelectNYCTaxis(mockConnection, 2);
assertEquals(mockResultSet, rs);
}
}
Como a função SelectNYCTaxis
contém uma instrução SELECT
e, portanto, não altera o estado da tabela trips
, a simulação não é absolutamente necessária neste exemplo. No entanto, o mocking permite que o senhor execute rapidamente seus testes sem esperar que uma conexão real seja feita com o recurso compute. Além disso, o mocking permite que o senhor execute testes simulados várias vezes para funções que possam alterar o estado de uma tabela, como INSERT INTO
, UPDATE
e DELETE FROM
.