我正在尝试使用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
答案 0 :(得分:2)
测试本身没有错。唯一缺少的是这个
@PrepareForTest({ URL.class , Sample.class})
您还需要准备Sample类。除非您准备Sample类,否则Powermock不知道它应该代理该类,这意味着它不会干扰该类内部发生的事情。