[英]Can PowerMockito check arguments with whenNew?
我有一些 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
新實例並返回URL.class
mocked URL
URL.class
參數的新實例以包含子字符串( methodName.contains("SearchOrg")
,但是如何?)openConnection()
方法取決於methodName
例如:
如果方法 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()
(我的例子是嘲笑這個方法)。 無論如何,我認為通過這個例子你可以看到如何以一般的方式做到這一點。
希望能幫助到你
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.