首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Java中模拟URL

在Java中模拟URL
EN

Stack Overflow用户
提问于 2009-02-19 14:26:00
回答 10查看 48.2K关注 0票数 26

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

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

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

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2009-02-19 14:30:22

当我有一个不容易模拟的类,因为它是最终的(或在C#中密封的),我通常的方法是在类周围编写一个包装器,并在任何需要使用实际类的地方使用包装器。然后,我会根据需要模拟包装器类。

票数 21
EN

Stack Overflow用户

发布于 2011-05-31 23:24:22

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

代码语言:javascript
复制
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");
票数 23
EN

Stack Overflow用户

发布于 2013-01-18 05:11:39

我采用了以下方法:

代码语言:javascript
复制
public static URL getMockUrl(final String filename) throws IOException {
    final File file = new File("testdata/" + filename);
    assertTrue("Mock HTML File " + filename + " not found", file.exists());
    final URLConnection mockConnection = Mockito.mock(URLConnection.class);
    given(mockConnection.getInputStream()).willReturn(
            new FileInputStream(file));

    final URLStreamHandler handler = new URLStreamHandler() {

        @Override
        protected URLConnection openConnection(final URL arg0)
                throws IOException {
            return mockConnection;
        }
    };
    final URL url = new URL("http://foo.bar", "foo.bar", 80, "", handler);
    return url;
}

这给了我一个真正的URL对象,其中包含我的模拟数据。

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/565535

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档