gpt4 book ai didi

java - PowerMockito 可以使用 whenNew 检查参数吗?

转载 作者:行者123 更新时间:2023-11-30 08:41:14 25 4
gpt4 key购买 nike

我有一些 API 的实现。

例如:

public class SoPostApi implements SoApi {

...

@Override
public void searchOrganizations(String query, ...) {
String jsonResponse = performPostMethod("SearchOrg", ...);
...
}

@Override
public void searchCategories(String query, ...) {
String jsonResponse = performPostMethod("SearchCat", ...);
...
}

private String performPostMethod(String methodName, ...) {
URL url = new URL(API_URL + methodName);
...
}

我想使用 PowerMockito 来测试它。

我的看法:

  • 捕获 URL.class 的新实例并返回 mocked URL
  • 检查 URL.class 参数的新实例是否包含子字符串(methodName.contains("SearchOrg"),但如何?)
  • 根据 methodName 模拟 openConnection() 方法

例如:

  • 如果方法 performPostMethod 使用包含 "SearchOrg"String 参数实例化一个新的 URL.class 那么我想将其替换为URL 其中方法 openConnection() 返回为此参数配置的 HttpURLConnection(getInputStream() 必须返回带有列表的 json组织)。

  • 如果方法 performPostMethod 使用包含 "SearchCat"String 参数实例化一个新的 URL.class 那么我想将其替换为URL 其中方法 openConnection() 返回为此参数配置的 HttpURLConnection(getInputStream() 必须返回带有列表的 json类别)。

是否可以实现?

最佳答案

我认为您可以结合 whenNew(...)thenAnswer() 来做到这一点Mockito 功能。

类似于下面的例子:

  final InputStream inputStreamOrg = null; // Load your Org json input stream
final URL urlSearchOrg = PowerMockito.mock(URL.class);
Mockito.when(urlSearchOrg.openStream()).thenReturn(inputStreamOrg);

final InputStream inputStreamCat = null; // Load your Cat json input stream
final URL urlSearchCat = PowerMockito.mock(URL.class);
Mockito.when(urlSearchCat.openStream()).thenReturn(inputStreamCat);


PowerMockito.whenNew(URL.class).withArguments(Mockito.any(String.class))
.thenAnswer(new Answer<Object>() {
@Override
public URL answer(InvocationOnMock invocation) throws Throwable {
String spec = (String) invocation.getArguments()[0];
if (spec.contains("SearchOrg")) {
return urlSearchOrg;
} else if (spec.contains("SearchCat")) {
return urlSearchCat;
} else {
// OTher casees
return null;
}
}
});

注意:请注意,在您的 OP 中,您想模拟 openConnection() 方法以返回 InputStream。我认为这是一个混淆,因为 openConnection 不返回 InputStream。我想你指的是方法 openStream() (我的例子是模拟这个方法)。无论如何,我认为通过这个示例,您可以了解如何以一般方式执行此操作。

希望对你有帮助

关于java - PowerMockito 可以使用 whenNew 检查参数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35213165/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com