Ich habe eine Klasse, in der es eine private Variable Connection gibt. Ich möchte Funktion A testen, für die ich Funktion B und Funktion C vortäuschen muss.Test (Mocking) eine Void-Funktion, die intern andere Funktionen aufruft, die eine Verbindung zur Datenbank herstellen
Ich versuchte es mit PowerMock und Mockito, aber nicht in der Lage, es zu tun.
Was genau getan werden sollte, um Funktion A zu testen und Funktion B und Funktion C zu mocksen.
public class ToMock {
private Connection connection;
private static functionA(String name) {
// do something
functionB()
return xyz;
}
public static void functionB() {
connection = functionC("localhost", 10000);
}
public static void functionC(String hostName, int port) {
//make a connection to db
String connectionString = String.format("jdbc:hive2://%s:%d/",emrHost, port);
LOGGER.info("Connection string {}", connectionString);
try {
Class.forName("org.apache.hive.jdbc.HiveDriver");
Connection con = DriverManager.getConnection(connectionString, "hadoop", "");
LOGGER.info("Connected successfully");
return con;
} catch (ClassNotFoundException e) {
throw Throwables.propagate(e);
}
}
}
Sie könnten das Verbindungserstellungsteil in eine neue Fabrikklasse verschieben und dann nur diese Klasse vortäuschen. Auf diese Weise behalten Sie Ihre Logik auch unabhängig von der Erstellung der Datenbankverbindung ... –