A Databricks JDBC-illesztőprogram (Simba) tesztelése

Megjegyzés:

Ez a lap a Simba JDBC-illesztőre (legacy) vonatkozik, a 3. verzió alatti verziókra. A Databricks határozottan javasolja a Databricks JDBC-illesztőbe való migrálást a JDBC-kapcsolatokhoz. Olyan fejlesztéseket tartalmaz, mint a Unity Catalog metrikanézeteinek támogatása, a több SQL-utasítást felölelő tranzakciók, a tárolt eljárások, a gyorsabb nagy eredményű lekérés és a beépített ügyféltelemetria.

Ez a lap a Databricks JDBC-illesztőprogramot használó kód tesztelését ismerteti.

Használjon bármilyen tesztelési keretrendszert JDBC-kompatibilis nyelvekhez. Az alábbi példák A JUnit és a Mockito használatával tesztelik a JDBC-illesztők kapcsolatait. Ez a kód a Databricks JDBC-illesztőprogram (Simba) hitelesítési beállításaiban szereplő példán alapul.

Segítő függvények

A Helpers.java fájl a JDBC-kapcsolatokhoz használható segédprogramfüggvényeket tartalmaz:

  • CreateConnection: Kapcsolatot nyit meg egy Azure Databricks számítási erőforrással.
  • SelectNYCTaxis: Lekérdezi a megadott számú sort a következőből samples.nyctaxi.trips: .
  • PrintResultSet: Az eredményhalmaz tartalmát a konzolra nyomtatja.
// 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(")]");
    }
  }
}

Main osztály

A Main.java fájl meghívja a segédfüggvényeket az adatok csatlakoztatásához és lekérdezéséhez:

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

Egységtesztek mockolással

A fájl JUnit HelpersTest.java és Mockito használatával teszteli a függvényt SelectNYCTaxis . A mocking az adatbázis-kapcsolatokat valós számítási erőforrások használata nélkül szimulálja, így a tesztek másodpercek alatt futnak anélkül, hogy befolyásolnák az Azure Databricks-munkaterületeket.

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

Mivel SelectNYCTaxis csak egy utasítást SELECT futtat, itt nincs szigorúan szükség a gúnyolásra. A gúnyolás azonban különösen akkor hasznos, ha adatokat módosító függvényeket tesztel (INSERT INTO, UPDATE), DELETE FROMmivel a táblák állapotának befolyásolása nélkül is futtathat teszteket.