java - 在 Java 中模拟 URL

标签 java url mocking

在我们想要模拟的一个 Java 类中有一个 URL 对象,但它是最终类,所以我们不能。我们不想更上一层楼并模拟 InputStream,因为这仍然会给我们留下未经测试的代码(我们有严格的测试覆盖标准)。

我尝试了 jMockIt 的反射功能,但我们在 Mac 上工作,Java 代理处理程序存在我无法解决的问题。

那么有没有在junit测试中不涉及使用真实URL的解决方案?

最佳答案

就像 Rob 说的,如果你想要模拟从 URL 返回的连接,你可以扩展 URLStreamHandler。例如,使用 mockito:

final URLConnection mockUrlCon = mock(URLConnection.class);

ByteArrayInputStream is = new ByteArrayInputStream(
        "<myList></myList>".getBytes("UTF-8"));
doReturn(is).when(mockUrlCon).getInputStream();

//make getLastModified() return first 10, then 11
when(mockUrlCon.getLastModified()).thenReturn((Long)10L, (Long)11L);

URLStreamHandler stubUrlHandler = new URLStreamHandler() {
    @Override
     protected URLConnection openConnection(URL u) throws IOException {
        return mockUrlCon;
     }            
};
URL url = new URL("foo", "bar", 99, "/foobar", stubUrlHandler);
doReturn(url).when(mockClassloader).getResource("pseudo-xml-path");

关于java - 在 Java 中模拟 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/565535/

相关文章:

java - 将用户输入与 Java 中的属性文件进行比较

java - 什么是 NullPointerException,我该如何解决?

java - 如何在Arraylist java中通过ID号搜索并显示对象?

ios - UIWebView 获取SPA(单页应用)网站的当前URL

C# + 模拟服务层?

java - @Mock 和 @InjectMocks 之间的区别

java - 无法将 JMenuItem 添加到 JPopupMenu 中的 JMenu

javascript - 如何使用 POST 方法在 Pentaho 中调用另一个仪表板

android - 处理我的应用程序中的链接

javascript - 如何使用 Jest 模拟直接导入的函数?