使用 Powermockito 模拟最终 class 的本地对象创建
Mocking local object creation of a final class using Powermockito
我正在尝试使用 PowerMockito 模拟最终的 class 对象创建。
但它没有考虑模拟对象并创建实际对象,如输出和调试屏幕截图所示。
这里可能遗漏了什么。
请说明。
Class
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);
}
}
测试Class
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
你的测试本身没有任何问题。你唯一缺少的就是这个
@PrepareForTest({ URL.class , Sample.class})
您还需要准备样品 class。除非您准备示例 class,否则 Powermock 不知道它应该代理 class,这意味着它不会干扰其中发生的事情。
我正在尝试使用 PowerMockito 模拟最终的 class 对象创建。 但它没有考虑模拟对象并创建实际对象,如输出和调试屏幕截图所示。
这里可能遗漏了什么。
请说明。
Class
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);
}
}
测试Class
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
你的测试本身没有任何问题。你唯一缺少的就是这个
@PrepareForTest({ URL.class , Sample.class})
您还需要准备样品 class。除非您准备示例 class,否则 Powermock 不知道它应该代理 class,这意味着它不会干扰其中发生的事情。