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