Jim*_*Jim 6 junit mocking mockito powermock powermockito
我正在尝试使用PowerMockito来模拟我正在测试的代码中java.net.URL类的创建.基本上,我想阻止真正的HTTP请求发生,而是1)在发出请求时检查数据,2)在模拟的响应上提供我自己的测试数据.这就是我正在尝试的:
@RunWith(PowerMockRunner.class)
@PrepareForTest({ URL.class, MockedHttpConnection.class })
public class Test {
URL mockedURL = PowerMockito.mock(URL.class);
MockedHttpConnection mockedConnection = PowerMockito.mock(MockedHttpConnection.class);
...
PowerMockito.whenNew(URL.class).withParameterTypes(String.class).withArguments("MyURLString").thenReturn(mockedURL);
PowerMockito.when(mockedURL.openConnection()).thenReturn(mockedConnection);
...
}
Run Code Online (Sandbox Code Playgroud)
我想测试的代码如下所示:
URL wlInvokeUrl = new URL(wlInvokeUrlString);
connection = (HttpURLConnection) wlInvokeUrl.openConnection();
Run Code Online (Sandbox Code Playgroud)
在我的测试场景中,我模拟了wlInvokeUrlString以匹配"MyURLString".我也试过使用各种其他形式的whenNew行,试图注入模拟.无论我尝试什么,它都不会拦截构造函数.我想要做的就是"捕获"对openConnection()的调用并让它返回我的模拟HTTP连接而不是真实连接.
我在同一个脚本中先在这个类之前模拟了其他类,这些类按预期工作.要么我需要第二双眼睛(可能是真的),或者URL类有一些独特之处.我注意到如果我使用"whenNew(URL.class).withAnyArguments()"并将"thenReturn"更改为"thenAnswer",我可以触发它.唯一的问题是我从来没有得到我的代码的URL调用.我看到的是对URL.class的3参数构造函数的调用以及参数的所有空值.难道这个类来自Java运行时并且由测试运行器引导?任何帮助深表感谢.
小智 0
我不确定.withParameterTypes(x)和之间的区别.withArguments(x),但我相信您需要按如下方式进行设置才能使您的代码正常工作。尝试一下,如果没有帮助请告诉我。
PowerMockito.when(mockedURL.openConnection()).thenReturn(mockedConnection);
PowerMockito.whenNew(URL.class).withArguments(Mockito.anyString()).thenReturn(mockedURL);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4177 次 |
| 最近记录: |