我正在尝试使用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运行时并且由测试运行器引导?任何帮助深表感谢.
我有这个 JSON 输入到 JQjq
{
"names": [{
"name": "John Smith"
},{
"name": "Jane Doe"
},{
"name": "Jackson Longfellow"
}]
}
Run Code Online (Sandbox Code Playgroud)
我想使用 jq 选择名称长度> 10 个字符的所有项目。这意味着输出将是:
{
"names": [{
"name": "Jackson Longfellow"
}]
}
Run Code Online (Sandbox Code Playgroud)
过滤length器似乎只计算数组中的项目。是否有其他内置过滤器可用于此目的?
我有一个看起来像这样的 JSON 对象:
{
"a": [{
"name": "x",
"group": [{
"name": "tom",
"publish": true
},{
"name": "joe",
"publish": true
}]
}, {
"name": "y",
"group": [{
"name": "tom",
"publish": false
},{
"name": "joe",
"publish": true
}]
}]
}
Run Code Online (Sandbox Code Playgroud)
我想选择其中的所有条目publish=true并创建一个简化的 JSON 对象数组,如下所示:
[
{
"name": "x"
"groupName": "tom"
},
{
"name": "x"
"groupName": "joe"
},
{
"name": "y"
"groupName": "joe"
}
]
Run Code Online (Sandbox Code Playgroud)
我尝试了很多组合,但是 group 是一个数组的事实似乎阻止了每个组合的工作。在这种特定情况下以及一般情况下,您如何在不丢失完整层次结构的情况下进行深度选择?