gpt4 book ai didi

java - 测试(模拟)一个 void 函数,该函数在内部调用其他与数据库创建连接的函数

转载 作者:太空宇宙 更新时间:2023-11-04 12:42:02 24 4
gpt4 key购买 nike

我有一个类,其中有一个私有(private)变量 Connection。我想测试 functionA,为此我必须模拟 functionB 和 functionC。

我尝试使用powermock和mockito但无法做到这一点。

测试 fucntionA 以及模拟 functionB 和 functionC 应该做什么。

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

最佳答案

像 @neurotic-d 描述的那样重构你的代码。像这样的事情:

public class ToMock {

private Connection connection;

public ToMock(Connection connection){
this.connection = connection;
}

private functionA(String name) {
// do something

return xyz;
}
}



public class ToMockFactory {

public static ToMock toMock(){
return new ToMock(functionB());
}

public static Connection functionB() {
return functionC("localhost", 10000);
}

public static Connection 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);
}
}
}

关于java - 测试(模拟)一个 void 函数,该函数在内部调用其他与数据库创建连接的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36741812/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com