使用Powermockito模拟最终类的本地对象创建

时间:2018-07-26 14:40:43

标签: java unit-testing powermockito

我正在尝试使用PowerMockito模拟最终类对象的创建。 但这并未考虑到模拟对象并创建实际对象,如输出和调试屏幕截图所示。

这里可能缺少什么。

请澄清。

课程

import java.net.MalformedURLException;
import java.net.URL;

public class Sample {

public void m1(String input) throws IOException {
    URL url = new URL(input);
    URLConnection connection = url.openConnection();
    System.out.println(url);
    System.out.println(connection);
}

}

测试类

import java.net.URL;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;

@RunWith(PowerMockRunner.class)
@PrepareForTest({ URL.class })
public class SampleTest {
@Test
public void testM1() throws Exception {
    String input = "http://www.example.com";

    URL url = PowerMockito.mock(URL.class);
    PowerMockito.whenNew(URL.class).withAnyArguments().thenReturn(url);

    Sample sample = new Sample();
    sample.m1(input);
}
}

输出

http://www.example.com
sun.net.www.protocol.http.HttpURLConnection:http://www.example.com

enter image description here

1 个答案:

答案 0 :(得分:2)

测试本身没有错。唯一缺少的是这个

@PrepareForTest({ URL.class , Sample.class})

您还需要准备Sample类。除非您准备Sample类,否则Powermock不知道它应该代理该类,这意味着它不会干扰该类内部发生的事情。