如何模拟静态方法,该方法将尝试建立HttpURLConnection并使用Mockito返回类型为HttpURLConnection的连接Object

hwamh0ep  于 2023-01-02  发布在  其他
关注(0)|答案(1)|浏览(146)

我是java新手,在处理一个需求时,我需要为一个实用类编写测试用例,存在如下所示的行:

HttpURLConnection con =null; 

 if (T.equalsIgnoreCase(sslCheck)) { 

con = HttpsURLServiceUtil.openHttpURLConnection(sslURLDetails); 

} else if (F.equalsIgnoreCase(sslCheck)) { 

con= (HttpURLConnection) urlObj.openConnection(); 

} 

} else { 

con = (HttpURLConnection) urlObj.openConnection(); 

}

所以我想模拟有依赖关系的代码行

con=HttpsURLServiceUtil.openHttpURLConnection(sslURLDetails);

con= (HttpURLConnection) urlObj.openConnection();

问题是,我尝试使用power mockito和Mockito内联模拟静态方法openHttpURLConnection,但每次模拟时,连接对象con的值都为null。因此,我在行中遇到null指针异常

con.setRequestMethod ("POST");

因为这个异常,控制被转移到了位于上一行200行的catch块。因此,我不能覆盖中间行,因为每当我模拟时,我都会得到空指针异常。有人能帮助我使用Mockito/Mockito-inline来模拟依赖行为吗?这样,它会建立伪连接,并返回一个具有非空值的伪连接对象。请参考sslURLDetailsMap值示例。如果需要,我们可以在值字段中使用任何值。
sslURLDetails指的是map,请查找带有键的示例map,如下所示:

Map<String, String> sslURLDetails= new LinkedHashMap<>(); 

ss1URLDetails.put("MPOWER_SSL_RTCS_URL1", "https://"); ss1URLDetails.put("SSL_KEY_STORE_FILENAME", "C:/Users/Desktop/certs/XYZ/report.jks"); ss1URLDetails.put("SSL_TRUST_STORE_FILE_NAME", "C:/Users/Desktop/certs/XYZ/report.jks"); sslURLDetails.put("SSL_USER_PASSCODE", ""); 

sslURLDetails.put("SSL_KEY_STORE_TYPE", "JKS"); 

ss1URLDetails.put("SSL_URL_ENABLED", "true");
flseospp

flseospp1#

你还没有真正给出如何使用这个方法的任何上下文,但是你能够重构你的代码吗?改变你的静态方法并用依赖注入实现它会容易得多吗?
如果这不是一个选项,有一些库可以模拟或存根静态方法(例如.net中的Fakes,但我不是一个java小伙子,所以你需要研究你的堆栈中有什么可用)。

相关问题