java - 使用 EasyMock 的 PowerMock Java URL

标签 java easymock powermock

我有以下代码...

@Test
public void wrapSoapTest1() throws TransformerConfigurationException, IOException {
    RequestUtil r = new RequestUtil(SAMPLE_REQUEST_BEFORE.getBytes(),"");
    URL url = PowerMock.createNiceMock(URL.class);
    r.setXslUrl(url);
    EasyMock.expect(url.openStream()).andReturn(IOUtils.toInputStream(XSLT, "UTF-8"));
    Assert.assertEquals(SAMPLE_REQUEST_AFTER, new String(r.wrapSOAP()));
}

当我运行这个程序时,我收到以下错误......

java.lang.AbstractMethodError: java/net/URLStreamHandler.openConnection(Ljava/net/URL;)Ljava/net/URLConnection;
at java.net.URL.openConnection(URL.java:957)

有没有办法模拟 URL 并发送自定义字符串作为响应?

最佳答案

如果您使用PowerMock,则必须确保您的测试用例使用@RunWith(PowerMockRunner.class)进行注释。您必须告诉 PowerMock 为测试准备 URL 类 (@PrepareForTest({ URL.class })) 并且您应该使用 PowerMock.expectLastCall() 而不是 EasyMock 方法。至少你必须将模拟置于重放模式。

这应该有效。

@RunWith(PowerMockRunner.class)
@PrepareForTest({ URL.class })
public class SoapTest {
    @Test
    public void wrapSoapTest1() throws TransformerConfigurationException,
        IOException {
        RequestUtil r = new RequestUtil(SAMPLE_REQUEST_BEFORE.getBytes(),"");
        URL url = PowerMock.createNiceMock(URL.class);
        r.setXslUrl(url);
        url.openStream();
        PowerMock.expectLastCall().andReturn(IOUtils.toInputStream(XSLT, "UTF-8"));
        PowerMock.replay(url);
        Assert.assertEquals(SAMPLE_REQUEST_AFTER, new String(r.wrapSOAP()));
    }
}

关于java - 使用 EasyMock 的 PowerMock Java URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21739760/

相关文章:

scala - PowerMock 无法解决不明确的引用

java - PowerkMock-ing BufferedReader 间歇运行

java - 如何有效地测试 SQL/JPQL/HQL?

java - 如何在 react 中渲染和显示日期字符串而不出现错误

Java数据结构(简单题)

java - EasyMock正在调用真正的方法

java - 在多线程中使用 easymock

java - 一个简单的 Java 代码,运行良好但运行方式有点难以理解

java - PowerMock EasyMock 基础知识

java - 使用mockito和powermock时出现ClassCastException