gpt4 book ai didi

java - JUnit Mockito URL 和 HttpsURLConnection

转载 作者:行者123 更新时间:2023-12-02 00:47:28 33 4
gpt4 key购买 nike

我有以下代码:

public byte[] myFunction(String s1, String s2, String s3) {

try {
URL myUrl = new URL("https://myUrl");
HttpsURLConnection connection = (HttpsURLConnection) myUrl.openConnection();
connection.connect();

int responseCode = connection.getResponseCode();
String lastPacket = connection.getHeaderField("LastPacket");

byte fileContent[] = IOUtils.toByteArray((InputStream) connection.getInputStream());
return fileContent;
}
} catch (Exception e) {
e.printStackTrace();
return null;
}
}

我想对上面的代码进行单元测试。所以我使用 MockitoJUnitRunner 编写了 JUnit:

@RunWith(MockitoJUnitRunner.class)
public class EvmlSeviceImplTest {

@Mock
private URL url;

@Mock
private HttpsURLConnection httpsURLConnection;

@InjectMocks
private MyClass myClass;

@Before
public void preSetup() {
try {
Mockito.doReturn(httpsURLConnection).when(url).openConnection();
Mockito.doReturn(200).when(httpsURLConnection).getResponseCode();
Mockito.doReturn("-1").when(httpsURLConnection).getHeaderField("LastPacket");
} catch (Exception e) {
e.printStackTrace();
}
}

@Test
public void testMyFunction() {
myClass.myFunction("my", "dummy", "data");
}
}

但这里的问题是 URL 是最终类,而 Mockito 无法监视最终类。既然我们使用的是 MockitoJUnitRunner,那么如何才能做到这一点呢?

我遇到了异常:

org.mockito.exceptions.base.MockitoException: Cannot mock/spy class java.net.URL

最佳答案

让我们仔细看看您的函数以及您尝试测试的内容:

URL myUrl = new URL("https://myUrl"); // (1)
HttpsURLConnection connection = (HttpsURLConnection) myUrl.openConnection(); // (2)
connection.connect(); // (3)

int responseCode = connection.getResponseCode(); // (4)
String lastPacket = connection.getHeaderField("LastPacket");

byte fileContent[] = IOUtils.toByteArray((InputStream) connection.getInputStream()); // (5)

return fileContent;

因此,在第 1、2 和 3 行中,您创建了一个到某个远程资源的连接对象并连接到它。为此,您可以使用 SDK 的类。

然后检查响应代码 (4) 并从流中读取 (5)。同样,您为此使用了 SDK 的标准库。

问题是:您真的想要对我们可以安全地假设正在工作的代码进行单元测试吗?

我要做的是将第 1 到 4 行提取到一个单独的类中,并使用返回您可以读取的流的方法。然后,在您的测试模拟中,根据您的需求进行流式传输。但不要对如此低级的代码进行单元测试。

关于java - JUnit Mockito URL 和 HttpsURLConnection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57885951/

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