小编Jim*_*Jim的帖子

无法使用PowerMockito/Mockito模拟URL类

我正在尝试使用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运行时并且由测试运行器引导?任何帮助深表感谢.

junit mocking mockito powermock powermockito

6
推荐指数
1
解决办法
4177
查看次数

如何选择键值长度超过数字的jq项

我有这个 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器似乎只计算数组中的项目。是否有其他内置过滤器可用于此目的?

select json jq

2
推荐指数
1
解决办法
5109
查看次数

从数组内的子字段中选择值

我有一个看起来像这样的 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 是一个数组的事实似乎阻止了每个组合的工作。在这种特定情况下以及一般情况下,您如何在不丢失完整层次结构的情况下进行深度选择?

jq

1
推荐指数
2
解决办法
164
查看次数

标签 统计

jq ×2

json ×1

junit ×1

mocking ×1

mockito ×1

powermock ×1

powermockito ×1

select ×1