下面是一个简单的 java 命令行实用程序,用于将网页下载到文件中。
这段代码来自这里:
https://www.codejava.net/java-se/networking/java-urlconnection-and-httpurlconnection-examples
我的问题:将 mockito 与此命令行程序集成是个好主意吗?
例如,我想扩展此实用程序的功能以返回内部服务器错误响应代码,即使提供的 url 有效。
用例是开发的组件需要部署到临时服务器上的类生产运行实例中,无法安装像 Mockoon 这样的工具。此外,仅依赖于使用 JUnit 和 Mockito 开发的测试是不够的。这是因为在这种情况下,我们将运行集成测试,其中正在运行的实例具有所有依赖项,并且其他系统可以与组件交互。当组件在这样的环境中运行时,我需要查看它在 url 返回内部服务器错误时的行为方式。
我们可以使用 Mockoon 实现相同的效果,但是,由于政策限制无法安装 Mockoon,我想通过编写模拟逻辑以及开发的组件来找出是否有替代方案。
我对下面命令行实用程序的这种方法的想法,我们可以添加另一个参数来配置该实用程序来模拟
httpurlconnection
以返回内部服务器错误,即使 url 工作没有问题。
命令行实用程序的代码:
import java.net.*;
import java.io.*;
import java.util.*;
public class DownloadWebPage {
public static void main(String[] args) {
if (args.length < 2) {
System.out.println("Syntax: <url> <file>");
return;
}
String url = args[0];
String filePath = args[1];
try {
URL urlObj = new URL(url);
URLConnection urlCon = urlObj.openConnection();
InputStream inputStream = urlCon.getInputStream();
BufferedInputStream reader = new BufferedInputStream(inputStream);
BufferedOutputStream writer = new BufferedOutputStream(new FileOutputStream(filePath));
byte[] buffer = new byte[4096];
int bytesRead = -1;
while ((bytesRead = reader.read(buffer)) != -1) {
writer.write(buffer, 0, bytesRead);
}
writer.close();
reader.close();
System.out.println("Web page saved");
} catch (MalformedURLException e) {
System.out.println("The specified URL is malformed: " + e.getMessage());
} catch (IOException e) {
System.out.println("An I/O error occurs: " + e.getMessage());
}
}
}
下面是上面代码的粗略修改版本,以实现我正在寻找的内容:
import java.net.*;
import java.io.*;
import java.util.*;
public class DownloadWebPage {
public static void main(String[] args) {
if (args.length < 2) {
System.out.println("Syntax: <url> <file>");
return;
}
String url = args[0];
String filePath = args[1];
String mockFlag = args[2];
try {
URL urlObj;
URLConnection urlCon;
if (mockFlag.equals("interal_server_error") {
//Set up the mocks for urlObj and urlCon
//Must return the response code Internal Server Error
...
...
} else {
urlObj = new URL(url);
urlCon = urlObj.openConnection();
}
InputStream inputStream = urlCon.getInputStream();
BufferedInputStream reader = new BufferedInputStream(inputStream);
BufferedOutputStream writer = new BufferedOutputStream(new FileOutputStream(filePath));
byte[] buffer = new byte[4096];
int bytesRead = -1;
while ((bytesRead = reader.read(buffer)) != -1) {
writer.write(buffer, 0, bytesRead);
}
writer.close();
reader.close();
System.out.println("Web page saved");
} catch (MalformedURLException e) {
System.out.println("The specified URL is malformed: " + e.getMessage());
} catch (IOException e) {
System.out.println("An I/O error occurs: " + e.getMessage());
}
}
}
当然,我们首先要介绍的问题是可读性问题。我们可以通过使用 Strategy 软件设计模式来解决此类问题。我想知道这种方法是否合理,以前是否有人使用过。